14. 附录:从 YellowDog 2.3 (Dayton) 更新到 3.0 (Sirius)

这里是如何将 Yellow Dog Linux 从 2.3 (Dayton) 更新到 3.0 (Sirius) 的方法。这假设在完成基础安装后立即进行(即:安装了极少的软件包)

如果我们正在运行 X 窗口系统(以下内容基于“基础”安装,所以我们可能没有运行),请切换到文本模式 (/sbin/init 3)。我们假设我们有一些网络连接,越快越好。我们将手动下载一些软件包,所以请检查你是否能够做到这一点。一些基于控制台的下载工具,如 ncftp (ftp) 或 lynx (http) 可能会派上用场。

以下注意事项:如果你从 rpm 收到此处未提及的错误,你总是可以执行
rm -f /var/lib/rpm/__* ; rpm --rebuilddb
这在大多数情况下会修复 rpm 数据库。

首先,确保我们正在运行所有软件的最新版本。这可能不是必要的,但无论如何这样做也无妨。
apt-get update; apt-get dist-upgrade 
现在我们更改 /etc/apt/sources.list 以包含 3.0 的软件仓库。请注意,3.0 只有三个软件仓库:base, main, update。启动你最喜欢的编辑器(至少应该安装了 vi)并更新该文件。一个可用的 sources.list 文件可能看起来像这样
rpm ftp://ftp.uninett.no/linux/yellowdog/apt 3.0 base main update
rpm-src ftp://ftp.uninett.no/linux/yellowdog/apt 3.0 base main update
现在让我们更新软件包列表,并检查完整的发行版升级是否可行
apt-get update
apt-get -s dist-upgrade  
哇!那里有很多错误。让我们解决其中最糟糕的错误。从删除大量软件包开始。请注意,在此之后,我们将无法阅读 man 手册。
rpm -e kudzu kernel-pcmcia-cs rpm-python yup yi pspell aspell groff man
现在状态如何?
apt-get -s dist-upgrade again
仍然有错误,而且相当难以解决。我们必须采取一些更底层的操作。真正的痛点是安装新版本的 rpm,所以让我们从那开始。手动下载以下软件包
  glibc-2.3.1-51a.ppc.rpm 
  glibc-common-2.3.1-51a.ppc.rpm 
  libelf-0.8.2-2.ppc.rpm 
  popt-1.7-9d.ppc.rpm
  rpm-4.1-9d.ppc.rpm 
  librpm404-4.0.4-8x.27.ppc.rpm
  apt-0.5.5cnc4.1-1b.ppc.rpm
  libgcc-3.2.2-2a.ppc.rpm
  libstdc++-3.2.2-2a.ppc.rpm
  expat-1.95.4-1.ppc.rpm
  fontconfig-2.1-3.ppc.rpm
  freetype-2.1.3-4.ppc.rpm
  XFree86-libs-4.3.0-2.1c.ppc.rpm 
  XFree86-libs-data-4.3.0-2.1c.ppc.rpm
  XFree86-Mesa-libGL-4.3.0-2.1c.ppc.rpm
我们暂时不需要使用 apt,所以让我们直接删除它。
rpm -e apt
到目前为止,一切顺利。现在,让我们升级 glibc 和 rpm。这是最关键的部分。如果我们成功完成此步骤,其余的就很简单了。如果我们搞砸了,重新安装可能是唯一的解决方案。rpm 有一些依赖项,所以我们现在必须包含它们。
rpm -Uvh glibc-common-2.3.1-51a.ppc.rpm \ 
         glibc-2.3.1-51a.ppc.rpm        \
         libelf-0.8.2-2.ppc.rpm         \
         popt-1.7-9d.ppc.rpm            \
         rpm-4.1-9d.ppc.rpm             \
         librpm404-4.0.4-8x.27.ppc.rpm 
如果你的设置和我的一样,我们会遇到以下无法解决的错误
rpmlib(PartialHardlinkSets) <= 4.0.4-1 is needed by glibc-common-2.3.1-51a
这似乎是 YellowDog 的软件包维护者忽略的一个问题(说实话,我认为他们从 RedHat 继承了这个错误),所以我们只需忽略它,强制执行,并希望这以后不会给我们带来麻烦。
rpm -Uvh --nodeps --force glibc-2.3.1-51a.ppc.rpm                \
                          glibc-common-2.3.1-51a.ppc.rpm         \
                          libelf-0.8.2-2.ppc.rpm                 \
                          popt-1.7-9d.ppc.rpm                    \
                          rpm-4.1-9d.ppc.rpm                     \
                          librpm404-4.0.4-8x.27.ppc.rpm 
糟糕。来自 rpm 的糟糕错误。让我们检查 rpm 数据库是否仍然工作。
rpm -qa
好吧,看起来我们真的搞砸了。现在怎么办?很抱歉地说,但我骗了你,让你毁了你的计算机安装。出去生活,别再盯着这些旧古董了。开玩笑的。幸运的是,rpm 能够重建其数据库,所以我们只需删除旧的并构建一个新的。
rm -f /var/lib/rpm/__*
rpm --rebuilddb
现在数据库应该可以再次工作了,对吧?
rpm -qa
如果这有效,我们将获得 250 奖励积分和两颗银星,并且可以继续我们对 3.0 的追求。找到匕首并将其投向巨龙。

如果我们没有为 nsswitch 和 gconv-modules 设置任何特殊参数,我们将使用新的(如果存在)。
mv -f /etc/nsswitch.conf.rpmnew /etc/nsswitch.conf
mv -f /usr/lib/gconv/gconv-modules.rpmnew /usr/lib/gconv/gconv-modules
现在让我们重新安装 apt。它也有很多依赖项需要修复。
rpm -Uvh apt-0.5.5cnc4.1-1b.ppc.rpm            \
         expat-1.95.4-1.ppc.rpm                \
         freetype-2.1.3-4.ppc.rpm              \
         fontconfig-2.1-3.ppc.rpm              \
         libgcc-3.2.2-2a.ppc.rpm               \
         libstdc++-3.2.2-2a.ppc.rpm            \
         XFree86-libs-4.3.0-2.1c.ppc.rpm       \
         XFree86-libs-data-4.3.0-2.1c.ppc.rpm  \
         XFree86-Mesa-libGL-4.3.0-2.1c.ppc.rpm \
我有时会遇到 rpm 在此处挂起的情况。这是 rpm 中的一个已知错误,随时可能发生。如果你遇到这种情况,请获取另一个终端(如果你在主控制台上,请按 Alt+F2),杀死 rpm 进程,并删除并重建数据库。然后再次执行想要的 rpm 命令。
killall -9 rpm
rm -f /var/lib/rpm/__*
rpm --rebuilddb
现在;apt 的安装可能已更改了我们的 sources.list 文件,所以检查一下,如果需要,复制回原始文件。
mv /etc/apt/sources.list /etc/apt/sources.list.3.0.orig
mv -f /etc/apt/sources.list.rpmsave /etc/apt/sources.list
我们现在应该重新同步本地 apt 数据库,并检查状态
apt-get update && apt-get -s dist-upgrade
仍然有一些未解决的依赖项,但我们正在取得进展。安装了 apt 之后,剩下的就像嚼煮熟的鱼一样容易。没什么好担心的。哎哟!一根鱼刺。
apt-get install pam
拖入以下软件包:chkconfig cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain db4 hesiod openldap openssh openssh-clients openssh-server openssl perl perl-Filter python sendmail

除非你进行了某些特殊的 pam 配置,否则请使用系统身份验证的新值。然后继续更新。
mv -f /etc/pam.d/system-auth.rpmnew /etc/pam.d/system-auth

apt-get install passwd
拖入以下软件包:glib2 libuser
apt-get install kbd
拖入以下软件包:initscripts util-linux
apt-get install compat-db compat-pwdb
拖入以下软件包:compat-libstdc++
apt-get -s dist-upgrade
如果没有错误,我们就完成了所有困难的部分。好!现在最后的障碍:完整的发行版升级。执行
apt-get -y dist-upgrade
并享受完成这个任务的喜悦。你获得了所有积分。亲吻青蛙,你也会得到公主。你可能需要重启,只是为了检查一切是否都如你所愿。

你可能需要再次重新安装一些软件包。例如,“man” 可能会派上用场。
apt-get install kudzu rpm-python pspell aspell groff man 
这就是全部内容了。这并不难,对吧?