Migrating between architectures (简体中文)

From ArchWiki
Jump to navigation Jump to search

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Migrating between architectures (简体中文)#)

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

本文详述了从i686升级到x86_64的过程

先决条件

1. 几乎所有开源软件都可以运行在64位系统上,64位系统现在已经足够日常使用; 2. ArchLinux同时支持这两个架构。

好处: 1. 对大内存支持好; 2. 用64位系统能真正发挥出64位CPU的性能; 3. 没有2038问题; 4. 比起重装,需要的设置工作少许多; 5. 好玩。

坏处: 1. 有风险; 2. 需要学习些东西。


正式开始

一. 基本需求

0. CPU须支持64位

如果不满足这一条,那么请勿进行本文描述的操作。

1. 备份

如果你真的需要,其实这个过程是安全的,除非误操作,不会造成数据的丢失,如果系统里的二进制文件不算的话;

2. 空间需求

视安装的程序多少,需要5G或更多空间来存储pkg,如果从系统安装起没有进行过 pacman -Scc 这样的操作,可以用 du -sh /var/cache/pacman/pkg,查看需要的空间,因为要下载64位的包,所以需要大约同等大小的空间;

3. 时间准备

除去网络下载的时间,约需要一小时,此过程不可中断。

二. 准备工作

0. 下载i686的软件包

如果你从未运行过 pacman -Scc 或者手工删除包缓存,可跳过此步。 下列包是至少需要的,其实我们升级过程中需要的仅是pacman,源里写的依赖只有bash和libfetch、libarchive,实际现在的pacman依赖许多包,bash除了readline还依赖ncurses:

pacman glibc libfetch libarchive openssl acl attr xz-utils bzip2 zlib readline bash ncurses

为了安全起见,可以使用如下命令下载系统中已安的所有软件包:

pacman -Sw $(pacman -Q |awk '{print $1}')


1. 下载x86_64的软件包

注意:此过程中使用的全部都是-Sw,即仅下载,并不安装,千万不要漏了S后面的w,这会导致系统崩溃! 将 /etc/pacman.d/mirrorlist 中正在使用Server中的 i686 改成 x86_64,运行:

rm -rf /var/lib/pacman/sync/*
pacman -Sy
pacman -Sw $(pacman -Q |awk '{print $1}')

下载 lib32-glibc,这个包是升级唯一必须的32位兼容性包,因为现在的pacman没有了静态编译版本:

pacman -Sw lib32-glibc


2. 牛刀小试:安装64位内核

内核虽然是很关键,但是Arch中的64位内核是支持32位程序的,先安装个内核玩玩。

pacman -S kernel26

注意重启计算机,这次重启是必须的。 重启后一般不会有任何异样,可以通过 uname 来检查一下我们现在运行的内核:

$ uname -m
x86_64

为了进一步确认,可以安些的静态程序,比如dash或busybox,用file命令可以很直观的看出来它们是个64位程序。

$ file /bin/dash
/bin/dash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

安装busybox还有个好处便是系统坏处许多命令无法使用的时候它能提供许多很有帮助的命令,比如cp、tar 、gzip等。

到目前为止,我们的所有操作都是安全的。

三. 真正的开始

0. 真正开始前准备

注意:一旦真正开始了从32位到64位的升级,这个过程暂时是无法中止或回退的,如果出现中断,会导致系统无法启动。 需要准备的有: 良好的电源环境/充足的电池,该过程视机器不同,安装的软件包数量,需要10分钟至一小时时间; 打开两个或以上使用root登录的终端或控制台,建议在控制台登录,一般情况下在运行的程序不会因为库被删除而崩溃,但是不排除这种可能性,有些程序比如Fx在升级过程中就可能出现问题; 打开若干喜欢的程序,比如浏览器,IM,音乐播放器等,升级需要时间,这些玩意可以打发这无聊的时间,也能用来缓解一下紧张情绪,还能用来求助; 确认前面的准备工作已完成,用 uname -m 看看是不是运行的 64位内核。

1. 热身运动:安装32位运行库

pacman -S lib32-glibc

虽然有可能一次成功安装完成所有的包,但我们仍采用循序渐进的方式来做,一可以了解关键步骤,二可以增加挑战性。 这是我们全过程唯一引入的32位运行库。 测试一下:

/lib/ld-linux.so.2 /bin/ls

看着没什么变化,事实上,到现在,我们的系统还是安全的。

2. 安装开始:最重要的包:glibc

除了内核,最最重要的一个包便是它了,几乎所有的程序都依赖它。 注意:再次提醒,这一步开始,系统就随时可能出现问题,请确认操作!

pacman -S glibc

进行了这个操作之后,你会发现大部分程序都不能运行了,包括 ls、cp等,试试有什么还可以运行的命令。 动手试试,是不是有点紧张了?

3. 来个扇贝:安装最常用最基本的shell:bash

到了现在,我们用的环境已岌岌可危了,要跟系统直接打交道,离不开shell,而且,它也是Arch的包管理pacman的显式依赖关系之一。 现在的C库是64位的,而我们所有的程序都是32位的,这如果是好呢,还好我们准备了32位运行库,用它来运行 pacman :

/lib/ld-linux.so.2 /usr/bin/pacman -S readline bash ncurses

好了,现在我们的bash又回来了,小心的敲下:

bash

将会看到:

[root@kangkang ~]#

似乎还是没有变化。在上一步运行过bash的同学们,心里应该平静一些了。

4. Arch的基础:吃豆豆

包管理现在仍可以运行,甚至,在上面那个新运行过一次bash的环境中可以像完全没有任何改变的方式运行,直接敲 pacman 也是正常的。然而,我们需要64位的系统!不可以停在这里。

pacman -S libarchive libfetch pacman openssl acl attr xz-utils bzip2 zlib expat

故障排除:若不能直接运行,可用 /lib/ld-linux.so.2 /usr/bin/pacman 的方式来运行。

Warning: 这是个危险的操作,不可以少任何一个包,不可以中断,否则你的吃豆豆就玩不下去了~

完成了之后,pacman就可以以原生64位的方式运行了。

用 ldd 看看,是不是后面的地址长了很多?


# ldd /usr/bin/pacman
       linux-vdso.so.1 =>  (0x00007fff8c5ff000)

5. 吃豆豆:吃掉所有的豆豆

有了 pacman,所有的包都不是问题啦,下面就开始吧:

pacman -S $(pacman -Q|busybox awk '{print $1}')

如果安装了aur中的包,或手工安装了一些软件,那么这步会中止,请先删掉这些包,最基本的,很可能是安装了 codecs,而64位源中没有这个包。经过几次递归操作,这个过程应该很快就开始了,它需要一些时间来完成。 这时,我们前面准备的IM,浏览器,播放器,就可以派上用场了,先玩一会儿吧。中途如果某个程序挂掉,突然消失等,请不用紧张。

6. 紧张的时刻:Don't panic

安装过程顺利完成后,最最紧张的时刻来了:重启计算机。 我们能做的,就是默默等待它的启动,而我们盼来的,将不是kernel panic,所以,我们也不用panic。

到这,我们就成功的把32位的ArchLinux升级到64位啦,享受64位系统给您带来的快乐与麻烦吧!