LinuxSir.cn,穿越时空的Linuxsir!

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

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

[复制链接]
发表于 2003-2-18 01:30:28 | 显示全部楼层 |阅读模式
Debian参考手册

第六章 Debian软件包管理

使用ATP下载软件包时,请确保使用了squid设置本地HTTP代理,这样可极大的改善网络升级的性能,特别是对局域网中多台Debian机器同时升级。本章基于Woody系统撰写的,但大部分信息均适用于Potato系统(除了apt_preferences(5)和/etc/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的pdate选项或在运行dselect select、tasksel或dpkg -l前执行shell命令行“dselect update”。

它们处理关联软件包的方式也不同,apt-get会自动搜索下载depends类软件包,但不会理睬recommends和suggests类软件包,dselect在软件包选择方面提供了更多细操作(fine-grained control),默认状态它会搜索下载depends和recommends类软件包。参阅〖2.2.8 软件包关联性〗。

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



6.2 Debian生存工具
==================
掌握了这些知识,就能让你的系统“青春永驻”了:-)

亦可参阅〖3. Debian系统安装提示〗,〖5. 发布版升级〗和〖11.2 应急的编辑器〗。

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

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

    # dselect update
    # tasksel

6.2.2 使用APT安装系统
---------------------
对于新版的apt-get(> Woody),编辑/etc/apt/sources.list文件,添加unstable和testing镜像源,就可以从不同镜像源有选择地安装软件包。例如在testing发行版中指定某些包升级到unstable,某些包降级到stable。

对testing发行版进行有选择性的升级,可以设置/etc/apt/preferences如下:

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

下面的方式可获得同样的效果

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

假设当前系统环境为testing发行版:

    ·apt-get upgrade

    跟踪升级系统安装的所有属于testing发行版的软件包。

    ·apt-get install package

    从testing发行版中安装软件包,其关联包亦使用testing发行版中的版本。

    ·apt-get install package/unstable

    从unstable发行版中安装软件包时,其关联包使用testing发行版中的版本。

    ·apt-get install -t unstable package
   
    从unstable发行版中安装软件包时,其关联包亦使用unstable发行版中的版本。

如果跟踪的是stable发行版,可在上例的/etc/apt/preferences中将testing的Pin-Priority下调到60,也可使用命令:

    # echo 'APT:efault-Release "stable";' >> /etc/apt/apt.conf

其它可使用的命令:

    # apt-cache policy libc6 libc6-dev locales         # check status
    # apt-get install libc6=2.2.4-1 libc6-dev=2.2.4-1 locales=2.2.4-1
    # apt-get -u install interesting-new-package remove-package-
    # apt-get remove useless-old-package
    # apt-get remove --purge really-useless-old-package

将所有的软件包降级到stable,可编辑/etc/apt/preferences:

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

然后运行“apt-get upgrade”,由于Pin-priority > 1000,系统会被强制降级。注意,可能会出现少量关联性问题。

6.2.3 使用APT升级系统
---------------------
使用APT进行系统升级:

    # apt-get update
    ... 接着下列任何一条命令:
    # apt-get -u upgrade         # 下载并升级所有的关联包
    # apt-get -u dist-upgrade    # 下载并升级所有的关联包和新增的关联包
    # apt-get -u dselect-upgrade # 按dselect中的选择进行升级

下面的设置将-u选项设定为默认行为:

    $ cat >> /etc/apt/apt.conf << .
     // 总是显示软件包升级(-u)
     APT::Get::Show-Upgraded "true";
     .

使用-s选项可进行模拟升级(实际上并没有升级)。

dselect提供了一个菜单式的APT前端。deity和aptitude是dselect替换方案。

6.2.4 检测程序错误寻求帮助
--------------------------
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(lynx、links和w3m同样好用):

    $ 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
    $ mc

更多技术支持资源列在〖15. Debian技术支持〗。

6.2.5 APT升级错误及解决方法
---------------------------
从unstable/testing进行升级时可能出现软件包关联问题。多数情况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决:

   # 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和〖6.4.2 equivs软件包〗。

6.2.6 使用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目录。(参阅〖2.1.10 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 # 安装丢失的conffile

6.2.7 /var被删除后如何恢复系统
------------------------------
如果/var目录的所有文件都被删了,只要你做了/var/lib/dpkg/status的备份,就可用下面的方法恢复:

    # cd /
    # install -d /var/cache/apt/archives
    # install -d /var/cache/apt/archives/partial
    # install -d /var/lib/dpkg/
    # cp status-old /var/lib/dpkg/status
    # apt-cache gencaches

可以在/var/lib/dpkg/status-old或/var/backups/dpkg.status.*中查找旧的/var/lib/dpkg/status文件。

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

6.2.8 为无法启动的系统安装软件包
--------------------------------
使用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

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

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

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

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



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

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

6.3.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.3.3 使用APT进行全自动系统安装
-------------------------------
进行全自动安装,要在/etc/apt/apt.conf中加上一行:

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

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

安装完毕以后,可以用〖6.3.4 配置已安装软件包〗中的方法配置特定的软件包。

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

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

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

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

    apt-setup     - 创建/etc/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.3.5 删除软件包
----------------
删除软件包但保留其配置文件:

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

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

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

6.3.6 阻止旧软件包升级
----------------------
举个例子,要阻止libc6和libc6-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 package或apt-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.3.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.3.8 dselect——全面配置
-------------------------
在/etc/dpkg/dselect.cfg中加上一行包含“expert”选项以减少干扰。

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

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

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

使用D和Q,你要自负风险,所以使用这些命令要小心。对于速度慢的机器,请在其它速度快的机器上运行dselect选好软件包,然后用apt-get install安装它们。apt-get dselect-upgrade会完全按dselect的选择行事。

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

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

6.3.10 记录/拷贝系统配置
------------------------
对软件包选择情况进行本地备份:

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

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

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

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

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

    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

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

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

    $ apt-get source package/unstable
    $ 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”后缀的软件包以满足关联关系。debsign在devscripts软件包中。auto-apt可以轻松解决这些关联问题。请使用fakeroot,如是没有必要,就别使用root帐号。

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

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

6.3.12 本地软件包文件
---------------------
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建软件包(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/_.*$/ extra BOGUS/' | uniq > override
    # editor override # adjust BOGUS
    # 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.3.13 转化或安装外来软件包
---------------------------
alien可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien将它转化成系统首选的软件包格式后安装。alien还支持LSB的软件包。

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

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

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



6.4 其它Debian特性
==================

6.4.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.4.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.4.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。详情参阅〖9.4.5.1 自定义X会话〗。

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

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

    如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*和/etc/inetd.conf下的内容,还可以使用〖9.2.1 使用PAM和系统登录〗中提到的方法检查/etc/hosts.deny。pidof命令也很有用(参阅pidof(8))

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



    =========================================
    Debian Reference

    CVS, 2003-01-31-07:53:52
    Osamu Aoki osamu@debian.org
    Editor: David Sewell dsewell@virginia.edu
    中文翻译:LYOO iamlyoo@163.com
              2003/02/18
    =========================================
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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