定制 Lindows MobilePC

作者:Steve Hastings

Lindows MobilePC 是一款非常出色的硬件;请参阅我在 2003 年 12 月号的 Linux Journal 上的评测。我购买了一台,并且非常满意。然而,它附带的 Linux 系统并不是我想要的,所以我花了一些时间对其进行定制,以更好地满足我的需求。

Lindows MobilePC 是一款名为 eNote 的笔记本电脑,预装了 Lindows 3.0。在本文中,我将笔记本电脑本身称为 eNote。您需要 root 权限才能执行本文中描述的几乎所有操作。

我的选择是 Debian

我最喜欢的 Linux 版本是 Debian GNU/Linux,我希望我的 eNote 运行 Debian 的 Unstable 分支。这不需要完全重新安装,因为 Lindows 是基于 Debian 的,并且 Lindows 包含了所有必要的 Debian 实用程序,例如 apt-get。Lindows 没有使用这些实用程序,而是使用了自己的 Click-N-Run 系统。Lindows.com 本可以轻松删除这些实用程序,但它保留了它们;这很好。

所以,Lindows 是一个 Debian 系统,安装了一些非 Debian 软件包。为了切换到 Debian Unstable 安装,我想删除所有非 Debian 软件包,然后更新到最新的 Debian 软件包。

为故障做准备

从 Lindows 切换到其他系统为您提供了多次犯错的机会,这些错误可能会导致您的 eNote 无法启动。最好提前计划好如果发生这种情况该怎么办。首先,如果有任何您关心的数据,请备份这些数据!即使您刚购买了 Lindows MobilePC 并且还没有对其进行任何操作,您可能也应该备份 /etc 中的设置文件的参考副本,这样如果出现问题,您可以弄清楚以前的情况。备份数据可能最简单的方法是将其复制到另一台计算机,可能使用 scp 命令。

如果在某个时候您的 eNote 无法启动,您该如何恢复?eNote 不包括软盘驱动器或 CD 驱动器。但是,它确实具有从 USB 设备启动的能力。如果您有 USB CD 驱动器,您可以从您最喜欢的 Linux 发行版的安装 CD 启动。如果您喜欢 Red Hat、SuSE 或 Debian 以外的其他 Linux 发行版,您可以使用此技术安装全新的系统。eNote 还具有网络启动的能力,但我还没有尝试过。

如果您不想使用网络启动或 USB 设备,仍然有一种简单的方法可以为自己提供安全保障:使用交换空间安装紧急内核和一些恢复工具。首先,使用 swapoff 关闭交换。接下来,使用分区编辑器(例如 fdiskcfdisk)将交换分区的类型从 0x82(交换)更改为 0x83(ext2)。然后,使用 mke2fs 在分区上创建 ext2 文件系统,并将您的恢复工具复制到该空间。

Lindows MobilePC 配备了 256MB 的交换分区,足够容纳大量的恢复工具。您可以使用 Linux 恢复磁盘发行版中的工具集,但我建议您简单地获取 Lindows 系统中已有的所有工具的副本。假设您的交换分区是 /dev/hda2,就像我的 MobilePC 上一样,这些命令可以完成此操作

# mkdir /mnt/tmp
# mount /dev/hda2 /mnt/tmp
# cp -pr /boot /bin /usr/bin /sbin /lib /mnt/tmp

现在剩下的就是确保引导加载程序可以在紧急情况下从 /dev/hda2 分区启动。稍后,我将讨论 GRUB 引导加载程序并回到这个问题。

如果您使用此技术,请确保在重新启动之前安装了可用的引导加载程序。如果问题出在您的引导加载程序上,恢复工具也无济于事。

切换到 Debian

当到了实际切换到 Debian 的时候,我查看了所有软件包,使用了

# dpkg -l | less

我知道我想摆脱软件包名称中带有 lindows 或 xandros 的任何东西。由于 XFree86 的版本是特殊的 Lindows 版本,我认为这是一个很好的起点。尝试从 KDE 桌面上运行的 shell 提示符中删除 XFree86 是没有意义的,因为整个 X 环境将被终止,包括我的 apt-get 进程。所以我需要一个独立于 X 的 shell。我使用了 Ctrl+Alt+F1 来获取文本模式 tty,但发现在我的 Lindows MobilePC 上没有文本模式 tty。所以相反,我使用了来自我网络上另一台计算机的 SSH,远程登录到 MobilePC 并获得了 root shell 提示符。

我编辑了 /etc/apt/sources.list 文件,该文件直接指向 Debian 的美国主镜像,并将其指向离我家更近的 镜像。然后我更新了 APT 的软件包列表,以便 APT 知道有哪些新软件包可用

# apt-get update

然后,是时候开始删除我不想要的东西了

# apt-get remove xfree86-common

APT 警告我即将删除 126 个软件包;这正是我想要的,所以我按了 Enter 键。

这仍然留下了一些我不想要的软件包,所以我构建了一个命令行来查找所有这些软件包并摆脱它们。此命令查找名称中包含 lindows 的所有软件包,并将列表提供给 apt-get remove

# grep "Package: lindows" < /var/lib/dpkg/available | cut --delimiter=' ' -f2 | xargs apt-get remove -y

然后我对名称中包含 xandros 的任何软件包执行了相同的操作

# grep "Package: xandros" < /var/lib/dpkg/available | cut --delimiter=' ' -f2 | xargs apt-get remove -y

我检查以确保我完成了我想要做的事情。dpkg -l 有点令人困惑,因为它也显示了未安装的软件包。所以我通过 fgrep 管道传输它,以仅查找已安装的软件包(标记为状态 ii

# dpkg -l | fgrep ii | less

到目前为止一切看起来都不错,所以是时候将所有软件包升级到最新的 Debian Unstable 版本了

# apt-get dist-upgrade

正如 APT 有时会发生的那样,我的升级卡在了一些与 aRts 声音系统相关的软件包的循环依赖关系上。我不得不手动使用 dpkg 删除两个旧软件包才能解决问题

# dpkg -r libarts1-bin
# dpkg -r libarts1-glib
# apt-get -f install
# apt-get dist-upgrade

一旦 dist-upgrade 完成,就该安装 GNOME 系统了

# apt-get install gnome

此过程拉取了 185 个新软件包,并花费了一段时间。此步骤还为我拉取了 XFree86。同样,由于循环依赖关系,一些软件包未安装。我所要做的就是再次运行该命令,一切都安装好了,没有进一步的错误

# apt-get install gnome

我检查以确保 GDM 已安装,发现没有。GDM 是我首选的登录管理器,所以我使用以下命令安装了它

# apt-get install gdm

此时,我决定运行 aptitude

# apt-get install aptitude

aptitude 是一个基于 ncurses 的 APT 工具。aptitude 的一个很酷的功能是它可以找到所有推荐的软件包并安装它们。我按了两次 G 键开始更新,又安装了几十个软件包。

现在,我想确保 GNOME 实际上可以工作,所以我手动启动了 GDM

# /etc/init.d/gdm start

GDM 启动了,我登录了,我的 GNOME 桌面立即出现了。我喜欢计划顺利进行的时候。

进入 GRUB

到现在为止,我的笔记本电脑已经没有 Lindows 软件包,并且有一个完整的 GNOME 桌面。但我想检查安装了什么引导管理器。结果发现没有,因为 Lindows 系统一直在使用 xandros-lilo2,而我已经删除了所有 xandros* 软件包。我可以从 Debian 安装 LILO,但我更喜欢 GRUB,所以我安装了 GRUB

# apt-get install grub

然后我完成了 GRUB 安装过程。这里没有必要总结这些;您可以在 GRUB 手册中阅读相关内容。

如果您按照上述说明使用交换空间存放了恢复内核和一些恢复工具,那么您现在需要编辑 /boot/grub 目录中的 menu.lst 文件并添加以下行

title           Disaster recovery!
root            (hd0,1)
kernel          /boot/vmlinuz-2.4.20 root=/dev/hda3 ro single
initrd          /boot/initrd-2.4.20.gz
boot

顺便说一句,以下是用于启动 2.4.20 内核(例如 Lindows 附带的内核)的 menu.lst 行。这假设内核位于 Lindows 创建的引导分区 /dev/hda1 中,该分区通常挂载为 /boot

title           Debian GNU/Linux, kernel 2.4.20
root            (hd0,0)
kernel          /vmlinuz-2.4.20 root=/dev/hda3 ro
initrd          /initrd-2.4.20.gz
savedefault
boot
关键时刻

我安装了几个内核,包括一个我使用 Debian kernel-package 工具构建的内核。然后就到了关键时刻:使用彻底改变的系统进行首次重启。

它没有成功。

它启动了一部分,然后停止,返回此消息

Warning: unable to open an initial console.

我的 Debian 内核和我自己定制构建的内核都是如此。我发现原始的 Lindows 内核已经消失了,毫无疑问是在我删除所有 lindows* 软件包时消失的。

我没有在交换空间中安装任何恢复工具,所以我从 USB CD-ROM 驱动器启动。我手头没有任何可用的恢复盘,但 Red Hat 9 CD 可以工作,Lindows 4.0 可启动演示 CD 也可以工作。我复制了原始的 Lindows 2.4.20 内核,将其添加到我的 GRUB menu.lst 并重新启动。

它仍然没有成功。

当我设置我的 GRUB menu.lst 文件时,我没有为 2.4.20 内核指定 initrd。我修复了这个问题,重新启动并成功了!美好的一天。我的 eNote 现在包含一个最新的 Debian Unstable 系统和一个 GNOME 桌面。使用 Debian,我的 eNote 还具有绑定到 Ctrl+Alt+F1 到 Ctrl+Alt+F6 的文本模式 tty,这是它在使用 Lindows 时没有的功能。

目前,我唯一可用的内核是原始的 Lindows 内核。据我所知,问题是内核尝试挂载 DevFS 文件系统,而根文件系统以只读方式挂载。我相信解决此问题的唯一方法是使用带有内核的初始 RAM 磁盘 (initrd)。内核可以将 DevFS 挂载到 RAM 磁盘上的可写根文件系统,然后再重新挂载到 ReiserFS 根文件系统。

安顿下来

如果您将恢复工具放入了交换空间,那么现在是时候回收该空间了,就像这样

# mkswap /dev/hda2
# swapon -a

如果您有 PCMCIA 调制解调器卡,您可以在离家时使用它来访问互联网。以下是我让我的 Zoom Telephonics PCMCIA 调制解调器工作的方法。

我首先插入调制解调器,希望它可以工作。它没有,但您的调制解调器可能会工作,所以试试看。

接下来,我使用 cardctl 命令查询卡

# cardctl ident

返回

Socket 0:
  product info: "Zoom Telephonics, Inc.", "PCMCIA 56K LT DataFax"
  manfid: 0x0200, 0x0001
  function: 2 (serial)
Socket 1:
  no product info available

请注意,制造商的 ID 代码是 0x0200, 0x0001。

接下来,我编辑了 /etc/pcmcia/config,并将以下行添加到 Modems and other serial devices 部分

card "Zoom PC Card Modem"
  manfid 0x0200, 0x0001
  bind "serial_cs"

就这样。我的 Zoom 调制解调器现在可以工作了。

到目前为止,我还没有找到像 KDE 的 Kppp 那样好用的基于 GNOME 的 PPP 拨号器。目前,当我想使用调制解调器连接到互联网时,我仍然运行 sudo kppp&

结论

我仍然想对我的 eNote 进行一些调整和自定义。Lindows KDE 桌面有一个电池寿命监视器;我想在 GNOME 上安装一个。我有一张用于 WiFi 网络访问的 PCMCIA 卡,我想让它运行起来。还有其他一些事情。

但是所有的基本要素都在那里并且可以工作:我有我的 GNOME 桌面,我有一个可以工作的调制解调器卡,网络浏览器和电子邮件以及我使用的所有其他应用程序。我对 eNote 和我的新 GNOME 桌面非常满意。

资源

Debian GNU/Linux: www.debian.org

GRUB 引导加载程序: www.gnu.org/software/grub

Steve R. Hastings 首次在实际的纸质电传打字机上使用 UNIX。他喜欢和妻子一起骑自行车,听音乐,抚摸他的猫,并让他的 Linux 计算机做新的事情。

电子邮件: steve@hastings.org

加载 Disqus 评论