(6) APT工具集

来源:互联网 发布:个人信息网络黑市 编辑:程序博客网 时间:2024/05/17 03:32

第六章 APT工具集


简易地安装和升级操作是Debian系统风靡的原因之一,这个独特的优势主要归功于APT程序。

APT是advanced package tool的缩写。这个程序的"advanced"之处在于它处理包的方式。它不是简单地逐个对待每个包,而是根据包的依赖,对相关的包进行关联处理。

package source和source package:
    source容易导致歧义。source package是包含源码的包,而package source,是存放软件包的仓库,例如website,ftp server,CD-ROM等。

APT程序需要使用软件包仓库:/etc/apt/sources.list,该文件中列出了不同的软件包仓库,或者说sources。APT会导入所有这些sources中发布的软件包列表。这个操作的完成,需要下载二进制包和源码包,并分析包的内容。如果这些文件已经安装,那么APT只下载不同的部分来进行更新。

gzip,bzip2,LZMA和XZ压缩方式:
    通常.gz后缀的文件是以gzip工具进行压缩的。gzip是一个经典的Unix压缩工具,它速度快而且高效。新的压缩软件有更高的压缩率,但它们需要更多资源(计算时间和内存)来进行压缩和解压。这些新的压缩软件有(以软件发布先后顺序排序):bzip2(.bz2),lzma(.lzma)和xz(.xz)。

6.1 修改sources.list文件

6.1.1 语法

sources.list文件中的有效行对应着一个source,行内容由3个部分组成,3个部分被空格分割。第一个部分表示源的类型:

  • deb:针对二进制软件包
  • deb-src:针对源码包

第二部分,指出了source的基本URL(对于具体的一个包package.gz,必须使用全名称,也就是基本URL加上包名),这个地址由Debian的镜像或第三方软件提供者提供。这个URL可以是file://开头,表示这是一个本地的源,http://表示是由web服务器提供的源,FTP://表示是一个由ftp服务器提供的源,cdrom://表示是一个通过CD-ROM/DVD-ROM/Blu-ray介质提供的源。

第三部分的语法依赖于source的结构。最简单的情况下,你可以仅仅只需指定一个子目录,该目录中包含软件包。但是,通常的情况下,像Debian镜像一样,由于包含多个发行版和多种分类的软件包,因此,必须将这些包分类。这种情况下,sources.list文件必须指明发行版本(使用发行代号或对应的阶段版本(stable,testing,unstable))和软件包的分类(main,contrib,non-free等)。

main,contrib,non-free:
    根据软件的发行执照,Debian使用3种分类来区分它们。main表明软件完全遵从Debian Free Software Guidelines。non-free不完全遵从这些准则,但仍然可以不附加任何限制条件来发布。这一类软件不属于Debian的软件,但有些软件需要使用它们。Debian推荐用户优先使用main里面的软件。Contrib指的是那些必须依赖于一些非自由软件的开源软件,这些软件可以是non-free分类中的软件,也可能是一些非自由的文件,例如ROMs,BIOS等。contrib分类中也包含由非自由软件编译构建的自由软件。如OpenOffice.org的办公软件。

/etc/apt/sources.list.d/*.list:
    如果很多源被引用,那么将它们分割成多个单独的文件会很有用途。每一部分会被存储在/etc/apt/sources.list.d/filename.list文件中。

cdrom源表示使用CD/DVD-ROM作为软件包仓库。跟其他种类的源不同,cdrom源在光盘可用的时候才能够使用,而且一次只能使用一个盘。正因为如此,管理cdrom源跟其他源稍有不同。它需要使用apt-cdrom命令添加源,通常使用add参数,添加后,请求插入光盘,并进行对包列表的读取(使用apt-get update命令)。

6.1.2 Stable版本仓库

下面是一个stable系统中的标准的sources.list:

# Security updates
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

## Debian mirror

# Base repository
deb http://ftp.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.debian.org/debian wheezy main contrib non-free

# Stable updates
deb http://ftp.debian.org/debian wheezy-updates main contrib non-free
deb-src http://ftp.debian.org/debian wheezy-updates main contrib non-free

# Stable backports
deb http://ftp.debian.org/debian wheezy-backports main contrib non-free
deb-src http://ftp.debian.org/debian wheezy-backports main contrib non-free

上面的这个sources.list用于wheezy。之所以使用wheezy来表示(wheezy,wheezy-updates,wheezy-backports),而不使用stable表示(stable,stable-updates,stable-backports),是因为一旦有新的stable版本发行的时候,会造成混乱。

apt-spy:
    apt-spy能够测试出所有Debian镜像的下载速度,并生成一个sources.list文件:/etc/apt/sources.list.d/apt-spy.list,它指定了下载速度最快的镜像。   

大部分的软件都可以从"base repository"中获得,但这里的软件更新很慢。其他的仓库只包含一部分软件,但它们更新较快。需要注意的是,如果一个软件在多个仓库中都可用,那么APT将使用sources.list中的第一个可用的仓库。正因为如此,临时添加的第三方的仓库应当添加在sources.list文件的后面。

Security Updates

安全更新不是在通常的镜像服务器中,而是专门的服务器:security.debian.org,其中包含了针对stable发行版本的安全更新。

Stable Updates

Stable updates不是针对安全更新的,但在下一个stable版本发布之前,对于用户来说是非常重要的。该仓库中的软件一般是解决了一些重要的bug,或者软件有了更新。事实上,该仓库中是proposed-updates仓库的一个子集,这些软件的选择是由Stable Release Managers完成的。

Proposed Updates

Stable版本发行后,每2个月才更新一次。proposed updates仓库中维护着大量更新的,还未添加到base仓库中去的软件。前面所提到的security updates和stable updates都来自于此。

任何用户都可以使用该仓库,用来测试这些新的更新的软件。下面的一个仓库,显式地指定了stable版本:

deb http://ftp.debian.org/debian wheezy-proposed-updates main contrib non-free

Stable Backports

stable backports仓库中存放着"package backports"(向后移植),这个术语指的是针对最新版的软件,对其重新编译,使其能够在较老的发行版本中运行,一般是指stable版本。随着stable版本发布时间越来越久,许多软件已经进行了大量的更新,新的版本没有被整合到stable中,但使用testing和unstable又有风险,所以软件维护人员有时也会提供一份针对stable的重新编译版本,从而减少了导致不稳定的风险。

<a href="http://backports.debian.org/" "="">http://backports.debian.org/

stable backports仓库在一般的镜像中都可用。但是Squeeze所用的backports仓库仍要求特定服务器中,sources.list中必须有这样的源:

deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

backports来源于testing中的软件,一旦下一个stable版本发布,就能确保已安装的backports能够升级到对应的stable中的版本。尽管这个仓库中提供的软件都是更新的版本,APT并不会安装其中的软件,除非显式指定:

$ sudo apt-get install package/wheezy-backports
$ sudo apt-get install -t wheezy-backports package  

6.1.3 Testing/Unstable版本仓库

下面是一个标准的Testing或Unstable中的sources.list:

# Unstable
deb http://ftp.debian.org/debian unstable main contrib non-free
deb-src http://ftp.debian.org/debian unstable main contrib non-free

# Testing
deb http://ftp.debian.org/debian testing main contrib non-free
deb-src http://ftp.debian.org/debian testing main contrib non-free

# Stable
deb http://ftp.debian.org/debian stable main contrib non-free
deb-src http://ftp.debian.org/debian stable main contrib non-free

# Security updates
deb http://security.debian.org/ stable/updates main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free

对于这样的标准的sources.list,APT将从unstable仓库中下载软件。如果不想从unstable发行版中获取软件,可以使用APT::Default-Release选项来更改仓库,一般是更改为Testing版本。

尽管一个仓库就够了,但包含多个版本的仓库是有优点的。例如Testing版本的用户可能会想要从unstable版本中获取已经解决了部分bugs的软件版本,unstable用户也有可能会需要Testing中的软件版本。是否包含stable具有很大争议,但这么做可以使用户可以获取完成开发的较稳定的软件版本,而且也确保了自最近一次发布的stable版本以来,该软件的stable版本没有被修改过。

Experimental仓库

所有的Debian镜像中都有experimental软件,unstable中不存在这些软件,因为它们还不合格。通常,这些软件正处于开发阶段。如果软件经过改动后产生问题的,也可以放到这里。当软件维护者解决了问题和测试完成后,就要放到unstable中去,接受更多用户的使用和检验。

使用experimental的用户一般都不怕破坏系统。如果用户需要一个软件的时候,他也会冒着风险从experimental中安装该软件。

6.1.4 非官方源

除了官方镜像,还存在大量的非官方源,一些程序员会将他们编译的软件放到这些源中,甚至还有Debian项目中的开发人员将开发阶段的软件也放到这些源中。例如:http://www.apt-get.org/和mentors.debian.net。这些网站中都有很多可用的新版软件的源,用户使用这些源的时候,一定要注意,因为这些软件可能导致系统出问题。

6.1.5 Caching Proxy for Debian Packages

如果一个网内大量计算机都要安装同样的软件的时候,使用一个中间代理将很有帮助。可以配置APT使用"standard"代理,但Debian有更好的处理方法。如apt-cacher,apt-cacher-ng和approx。

6.2 aptitude和apt-get

APT是一个大项目,该项目计划包含一个图形接口。它依赖一个核心的库,其中,基于命令行的apt-get是当中的第一个前端程序。随后,一些图形接口的程序相继出现:synaptic,aptitude(包含了图形接口和文本接口两种),wajig等。最受欢迎的是apt-get,Debian安装过程中就使用它来安装软件。它跟命令行下的aptitude使用语法非常相似,但它们之间有很多不同。

6.2.1 初始化

使用APT前,要更新下最新的可用的软件列表:apt-get update。APT会花一点时间从源中下载这些列表,如果直接从CD-ROMs中安装软件,因为不需要通过网络下载这些列表,所以初始化操作会很快。

6.2.2 安装和卸载

使用apt-get install和apt-get remove来安装和卸载软件。APT会自动安装必要的依赖,也会自动卸载依赖于要被卸载的软件的那些软件。使用apt-get purge会完全卸载软件,删除其所有配置文件。

在多台计算机中重复安装软件:

有时候我们需要在多台计算机中安装同样的软件,使用APT可以很容易做到。

首先,获取已经安装了这些软件的计算机中的列表:
$ dpkg --get-selections > pkg-list

pkg-list文件中包含了已经安装的软件列表,然后将其传送到待安装软件的计算机中:

## Update dpkg's database of known packages
# avail=`mktemp`
# apt-cache dumpavail > "$avail"
# dpkg --merge-avail "$avail"
# rm -f "$avail"
## Update dpkg's selections
# dpkg --set-selections < pkg-list
## Ask apt-get to install the selected packages
# apt-get dselect-upgrade

同时进行安装和卸载:

使用apt-get/aptitude可以同时安装和卸载软件。当使用apt-get install packagename时,在包名后面添加"-"后缀表示卸载该软件;当使用apt-get remove packagename时,包名后面加上“+”表示安装该软件。如:
# apt-get install package1 package2-
# apt-get remove package1+ package2

apt-get --reinstall与aptitude reinstall

有时候卸载或修改会导致软件出问题,最简单的解决办法是重新安装该软件。不幸地是,打包系统发现该软件已经安装后,会拒绝重装该软件。使用apt-get的--reinstall选项可避免该问题。例如要重装postfix:
# apt-get --reinstall install postfix
使用aptitude稍微有所不同,但是有同样的效果。
要注意的是,并不是所有的软件破坏都能通过重装就能够解决。

如果sources.list文件中配置了不同版本的源,那么可以安装指定的软件所属发行版本。指定版本号:apt-get install package=version,但是不能选择不同的发行版本(Stable,Testing,Unstable)。如果要选择不同发行版本,使用apt-get install package/distribution。通过这些命令,用户可以选择指定版本的软件。

# apt-get install spamassassin/unstable

缓存.deb文件

APT会将下载的.deb文件缓存到/var/cache/apt/archives/中。使用Debian一段时间后,会缓存大量的软件包,占用大量磁盘空间,用户应当经常清理。apt-get clean可以清理整个目录;apt-get autoclean用来清除该目录下当前不能下载的包。

6.2.3 系统升级

用户应当经常升级系统,因为会使其安全升级:apt-get upgrade或aptitude safe-upgrade。这个命令会升级所有可升级的已安装的软件,不需要卸载任何软件。apt-get使用起来更苛刻一点,因为它拒绝安装之前未安装过的软件,这点跟aptitude不同。

apt-get升级时通常会选择最新版本的软件安装,除非使用experimental和stable-backports仓库。如果在sources.list中指定了Testing或Unstable,那么apt-get upgrade会选择从Testing或Unstable中安装软件,这可能不是用户所想要的。

如果想指定从特定的仓库中下载,可以使用-t或--target-release选项,如:apt-get -t stable upgrade。为了避免每次要显式地指定,可以将APT::Default-Release "stable"添加到/etc/apt/apt.conf.d/local。

对于重要的升级,例如将当前stable发行版本升级到下一个新的stable发行版本,你需要使用apt-get dist-upgrade。该命令会卸载废弃的软件,并安装新的软件。aptitude full-upgrade命令也有同样的功能,aptitude也能够使用dist-upgrade,但不推荐使用。

6.2.4 配置APT选项

除了上面提到的那些配置,还可以在/etc/apt/apt.conf.d目录中的配置文件中添加指令来配置APT。例如,添加DPkg::Options { "--force-overwrite";}来告诉dpkg忽略冲突。

.d目录

以.d为后缀的目录很常见,每个目录代表一个被分配成多个文件的配置文件。目录/etc/apt/apt.conf.d/中的文件用来配置APT。这些配置信息以字母顺序排序,所以更改前面的配置可能会影响后面的配置。这种结构带来了很大的便利。事实上,管理员可以不需更改原配置文件的情况下,增加新的现成的配置。   

6.2.5 管理包的优先级

管理软件源的优先级是APT配置的一部分。例如,你可能想在stable发行版中安装Testing,Unstable或Experimental的软件。这时候就可以给软件设置一个优先级,这个优先级将会影响APT的行为:对于每个软件,APT总会选择安装优先级最高的版本。

APT定义了几个默认的优先级。每个已经安装的软件版本的优先级是100,未安装的版本的默认优先级是500,但如果软件的版本属于目标发布版本(通过-t选项或APT::Default-Release设置),则会提升到990.你可以通过配置/etc/apt/preferences文件来设定某个软件的优先级。

APT总是会拒绝安装老版本的软件(即比当前已安装的版本低),除非它的优先级要高于1000.APT总是会选择优先级最高的,如果两个包的优先级一样,那么APT会选择版本号更新的那个。如果连版本号也一样,但内容不同,APT会选择安装没有被安装的那个。

如果包的优先级低于0,则它永远不会被安装。假如一个包的优先级在0和100之间,如果没有安装其他版本,它才会被安装。假如优先级在100和500之间,如果没有安装更新的版本或者在其他发行版中没有可用的版本,才会被安装。假如一个包的优先级在501和990之间,而且没有安装更新的版本或在目标发行版中没有可用版本,才会被安装。假如一个包的优先级在990和1000之间,只要已经安装的版本不比它更高,就会被安装。如果一个包的优先级高于1000,则总是会被安装。

当APT查看/etc/apt/preferences时,它会首先查看特殊条目,然后才是普通的软件的条目。如果存在多个条目,则使用最先匹配的。判断的关键标准是包的名字和对应的源:

假如你只想安装stable发行版的软件。不安装其他版本提供的软件,除非显式地要求。你可以这样编辑/etc/apt/preferences:

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

Package: *
Pin: release o=Debian
Pin-Priority: -10

a=stable表示从stable版本中安装软件。o=Debian限定了只能是Debian官方的,而不能是个人或第三方的。假设现在你的服务器中有服务依赖于5.14版本的Perl,你想确保升级时不会安装成其他版本。你可以这样:

Package: perl
Pin: version 5.14*
Pin-Priority: 1001

更多细节请参考手册apt_preferences(5):man apt_preferences.

6.2.6 使用多个发行版本

apt-get是一个非常优秀的工具,它能够让我们安装其他发行版的软件,例如,如果你安装的是stable版本,那么你可能会想要尝试下其他版本如Testing或Unstable下的软件版本。尽管安装不同版本软件可能会引发问题,但apt-get能够很好解决这些问题。首先,要在/etc/apt/sources.list中配置多个发行版的源,并定义默认的源(使用APT::Default-Release)。

假设你设定的是stable,sources.list中也列出了Unstable和Testing版本的源。这时候,你可以使用apt-get install package/testing来安装Testing版本的软件。假如由于依赖的原因导致安装失败,这时可以让apt-get使用-t选项来安装Testing下的依赖。Unstable同样如此。对于升级操作,也会只升级stable版本的软件,除了安装其他版本的软件,它们会从对应的版本中更新软件。这样的行为可以由优先级来解释:apt-cache policy。

apt-cache policy

利用apt-cache policy可以查看每个源的优先级。也可以使用apt-cache policy package来观察具体的某个软件的所有可用版本的优先级。

假设现在你已经安装了版本1的stable版本软件,在testing和unstable中分别有版本2和版本3可用。已安装的版本1优先级为100,但stable中可用版本的优先级是990,而testing和unstable中对应的软件的优先级是500.所以软件被限定在了stable中。

看看另一个例子:已经安装了版本2的Testing版本,版本1在stable中可用,版本3在Unstable中可用。版本1不会被安装,因为优先级低于当前已安装版本。剩下的Testing和Unstable的优先级都是500,怎么选择呢?APT会选择版本号更高的版本,也就是版本3.如果你不想这样,要选择Testing的话,你必须降低unstable中软件的优先级,比如480.你可以这样修改/etc/apt/preferences:

Package: *
Pin: release a=unstable
Pin-Priority: 490  

6.2.7 追踪已安装的软件

apt-get的一个基本功能是跟踪通过依赖安装的包,这些包被称为“自动包”,它们通常包含各种库。当用户卸载某个软件的时候,包管理者就可清理该软件所依赖的,不再使用的所有的依赖。apt-get autoremove可以完成这个工作。aptitude没有这个选项,因为它会自动清除那些没用的依赖。但这两个软件都会提示用户这些操作的具体细节。

将那些不直接使用的包标记为“自动包”会很有用,当不需要它们的时候就能够自动被卸载掉。apt-mark auto package会将package标记为自动包,而apt-mark manual package则相反。aptitude markauto和aptitude unmarkauto具有同样的功能,或者直接在aptitude界面中查看。如果用户想了解什么软件使用了某个自动包,那么可以这样:

$ aptitude why python-debian
i aptitude Recommends apt-xapian-index
i A apt-xapian-index Depends python-debian (>= 0.1.15)

6.3 apt-cache

apt-cache可以显示很多APT的内部数据库中的信息。这些缓存的信息是通过sources.list中的源获取到的,并在apt-get update期间生成信息。

apt-cache可以基于关键词搜索:apt-cache search keyword。apt-cache show package可以查看所有可用的版本的头信息,包括软件描述,依赖,开发者等信息。aptitude search和aptitude show也能完成同样的工作。

一些用法很少用到,例如apt-cache policy用来显示源的优先级,apt-cache dumpavail用来显示所有可用软件的头信息,apt-cache pkgnames用来显示系统中安装的软件列表。

axi-cache

apt-cache简单地从软件包的描述信息中抓取搜索,所以经常会返回太多搜索结果。使用axi-cache效果会更好,axi-cache会将搜索的结果按照相关度排序,并更好的呈现出来。


6.4 aptitude, synaptic

APT是用C++语言编写的,它的代码主要位于libapt-pkg共享库中,这样就可以提高代码复用率,前端程序(front-ends)就可以很容易地编写了。起初apt-get的初衷就是被设计成为一个测试libapt-pkg库的前端测试程序,随后这个程序意外地获得了极大的成功。

6.4.1 aptitude

aptitude是一个交互式的程序,也可以在控制台中运行半图形模式。你可以浏览已安装的软件和可用的软件,查看软件的信息,以及安装和卸载软件。该程序是专门为管理员设计的,所以它比apt-get更加智能,而且它的接口更容易理解和操作。

aptitude启动后会自动显示已安装的程序列表,所有可用的软件列表,可升级的软件列表等等,其界面中有各种帮助提示菜单。

可以使用/来搜索软件。搜索模式串可以是软件包名,还可以指定描述或其他的section信息。具体使用请参考文档。使用'l'(limit的意思),后面跟上搜索模式串,界面视图列表就会自动过滤搜索结果。

aptitude的命令行接口

大多数的图形接口的功能,使用命令行接口都能够做到。命令行的用法跟apt-get和apt-cache类似。aptitude的高级特性在命令行模式下也能够使用。例如你可以使用同样的搜索模式串。

使用aptitude来管理"automatic flag"是非常容易的。使用按键组合Shift+m来将某个已安装软件标记为automatic,使用m键来移除该标记。在软件列表视图中,aptitude使用A来标记automatic软件。如果不想看到automatic软件,则可以使用l~i!~M。l用来过滤结果,~i用来选择已安装的软件,!~M用来排除automic软件。详细的用法请参考文档。

6.4.2 synaptic

synaptic是一个包管理程序,它的界面由GTK+编写,界面非常简单易用。界面中给出了各种类别的软件列表,用户可以方便地进行各种操作。但这些操作不是立即被执行的,而是放到一个任务列表中顺序执行。

6.5 检查包的真实性

对于Falcot公司的服务器管理人员来说,安全是非常重要的。他们必须确保安装的包适用于Debian系统。计算机黑客会试图给合理的软件添加恶意代码。如果这样的软件被安装,那么它可能会盗取密码和机密资料。为了规避这种危险,Debian提供了tamper-proof seal,用来保证该软件来自官方开发版本,并且没有被第三方修改过。这个seal(印章)跟一些加密的hashes和一个签名协同工作。被签名的文件叫Release,它由Debian镜像服务器提供。该文件也包含Packages文件列表,和它们的MD5,SHA1,SHA256 hashes,以保证这些文件没有被修改过。

可用apt-key工具来管理这些受信任的keys。它维护一个GnuPG公开密钥的keyring文件,该文件被用来校验Release.gpg中文件的签名。它允许手动添加key,但通常只需使用Debian官方key。这些key由debian-archive-keyring这个包进行自动更新。一旦添加了适当的key后,在安装包之前就会校验签名,从而减少风险。

6.6 升级stable

Debian系统的一个优点是能够很方便地从当前stable版本中升级到最新版本。值得注意的是,升级过程会持续几十分钟,时间长短取决于你的下载速度。

6.6.1 推荐的操作步骤

Debian的stable版本发布间隔很久,用户在升级前应当仔细查看发布说明。此处,让我们假设从Squeeze升级到Wheezy。但是升级不是100%安全的,所以你应当在升级前备份重要数据。另一个好的习惯是事先整理已安装的软件,清理不需要的软件,给系统瘦瘦身,这样就会加快升级的速度。有用的工具有:aptitude,deborphan和debfoster。例如,你可以使用下面的命令,然后再使用aptitude检查一遍:

# deborphan | xargs aptitude --schedule-only remove

现在可以进行升级了。首先,你要更新/etc/apt/sources.list文件,把Squeeze改为Wheezy的源。如果sources.list中引用的是stable源,那么就不需要显式指定发行版的代号了,因为它本身就是指向最新的发行版本。无论哪种情况,都要更新下软件包列表:apt-get update。

更新完成后,你可以使用apt-get upgrade进行最小化升级。这一步完成后,使用apt-get dist-upgrade进行彻底的升级。这个过程中你应当谨慎apt-get所提示的动作:要添加的包是否是推荐的包或者说是否有用。当所有的包下载完后,就开始安装了,这期间要回答一些Debconf的问题,这些问题可能会涉及到修改本地配置文件。

6.6.2 升级导致的问题

无论管理员如何努力,主版本的升级结果并不总是随心所愿的。例如新软件跟先前的版本不兼容,或者新版软件仍会有漏掉的bugs,尽管在发行之前要经过testing版本周期测试。














0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 剥开的榴莲没熟壳又扔了怎么办 视频播放器激活码设备超限了怎么办 ai如何把右边菜单栏隐藏了怎么办 矫正牙齿粘牙齿的胶掉了怎么办 3m双面胶生产的时候胶不干怎么办 新房赠送面积没地热想接地热怎么办 教育网注册报名的用户名忘了怎么办 艺术生校考通过文化没过本线怎么办 想做主持人 但不是播音专业怎么办 微信登录版本最低登录不上怎么办 所录微课的视频声音小是怎么办 电脑开机黑屏只有光标在闪怎么办 联想家悦重装系统时驱动缺失怎么办 ps做到一半电脑重启了怎么办 宝宝起风疹怎么办 要注意的问题 惠普笔记本刚换的显卡又坏了怎么办 电脑装驱动时不注意点了跳过怎么办 刚抱回来的小猫不吃饭怎么办 三年级小孩字认的太少怎么办 孩子写字手出汗怎么办用什么笔壳 墙壁被小孩用彩色笔画花了怎么办 传图识字里有些字识别不了怎么办 一岁四个月宝宝智力发育迟缓怎么办 小打架受伤对方家长不配合怎么办 宝宝要上幼儿园了家长该怎么办 断奶涨奶怎么办又能防止乳房变形 孩子在幼儿园被小朋友打了怎么办 孩子在幼儿园被小朋友咬了怎么办 孩子被同学打了家长该怎么办? 孩子把同学打了打人家长该怎么办 孩子和同学发生矛盾家长该怎么办 孩子同学给孩子要东西家长该怎么办 如果遇到不讲理的孩子和家长怎么办 孩子调皮又被老师留校了怎么办 孩子拼音f和sh发音不清怎么办 自己在家生的孩子怎么办出生证明 在家念地藏经招来众生不走怎么办 家是济宁孩子上学想在济南上怎么办 高一孩子成绩严重下滑家长怎么办 商铺租客不交租金又不搬走怎么办 考试试卷找不到了明天要交怎么办