环境
操作系统:openEuler 开放欧拉 23.09
适用架构:ARM64(鲲鹏 920、飞腾 FT-2000/4、D2000)
简介
在 ARM64 平台的优麒麟中,ExaGear 安装完成后,会提供一个 AMD64 平台的 Ubuntu 运行环境。不过由于这个运行环境的系统镜像为最小化安装,因此需要补充一些设置。
安装 ExaGear
请参考《ExaGear 二进制动态翻译》https://my.oschina.net/chipo/blog/5176302
启动 ExaGear
sudo exagear
更新仓库
yum update
如果遇到错误:Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
请执行如下操作。
退出 ExaGear
exit
编辑 Apt 配置文件。
sudo nano /opt/exagear/images/ubuntu-2004-x86_64/etc/apt/apt.conf.d/70debconf
修改或加入以下两行。
APT::Cache-Limit "1000100100";
APT::Cache-Start "100100100";
重新启动 ExaGear。
sudo exagear
清空 Apt 缓存
apt clean
更新 Apt 缓存
apt update
安装 Nano
apt install nano
修改软件仓库的地址
Ubuntu 官方仓库的下载速度相对较慢,建议修改至镜像站。
方法 1
sed -i 's?//archive.ubuntu.com/?//mirrors.tuna.tsinghua.edu.cn/?g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
方法 2
nano /etc/apt/sources.list
替换命令 ctrl + \,将 archive.ubuntu 替换为 mirrors.huaweicloud,然后将 security.ubuntu 也替换。
保存命令 ctrl + o,退出命令 ctrl + x。
系统升级
如果搭建游戏运行环境,建议把 CentOS 从 7 升级到 8 然后安装 Lutris 。
准备工作¶
-
首先需要安装EPEL仓库:
yum install epel-release -y
-
安装yum-utils工具:
yum install yum-utils -y
-
解析RPM包:
yum install rpmconf -y rpmconf -a
注意,这里 rpmconf -a
有一些交互问答,采用默认选项。
-
清理所有不需要的软件包:
package-cleanup --leaves package-cleanup --orphans
安装dnf¶
-
需要首先安装CentOS 8的默认包管理器 dnf
yum install dnf -y
-
然后移除yum包管理器:
dnf -y remove yum yum-metadata-parser rm -Rf /etc/yum
升级CentOS 7到CentOS 8¶
-
现在执行CentOS 7升级到CentOS 8前需要线升级从:
dnf upgrade -y
-
然后安装CentOS 8的release软件包:
#dnf -y install http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-repos-8.2-2.2004.0.1.el8.x86_64.rpm \ #http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.2-2.2004.0.1.el8.x86_64.rpm \ #http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8.2-2.2004.0.1.el8.noarch.rpm dnf -y install http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-linux-repos-8-2.el8.noarch.rpm \ http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-linux-release-8.3-1.2011.el8.noarch.rpm \ http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-2.el8.noarch.rpm
-
升级EPEL仓库:
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-
在升级了EPEL仓库后,移除所有临时文件:
dnf clean all
-
删除CentOS 7的旧内核core:
rpm -e `rpm -q kernel`
-
移除冲突的软件包:
rpm -e --nodeps sysvinit-tools
-
然后执行CentOS 8升级:
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
报错:
Running transaction check Error: transaction check vs depsolve: (gcc >= 8 with gcc < 9) is needed by annobin-8.78-1.el8.x86_64 rpmlib(RichDependencies) <= 4.12.0-1 is needed by annobin-8.78-1.el8.x86_64 (annobin if gcc) is needed by redhat-rpm-config-120-1.el8.noarch rpmlib(RichDependencies) <= 4.12.0-1 is needed by redhat-rpm-config-120-1.el8.noarch To diagnose the problem, try running: 'rpm -Va --nofiles --nodigest'. You probably have corrupted RPMDB, running 'rpm --rebuilddb' might fix the issue. The downloaded packages were saved in cache until the next successful transaction. You can remove cached packages by executing 'dnf clean packages'.
不过,此时 cat /etc/redhat-release
已经显示是 CentOS Linux release 8.1.1911 (Core)
所以我们需要解决这个软件依赖的冲突问题:
-
升级gcc(升级以后gcc版本是8.3.1):
dnf upgrade gcc -y
但是升级以后报错依旧,看起来是因为依赖 rpm-4.14.2-26.el8_1.x86_64
才能完成。
参考 dnf upgrade and dnf update fails 这是因为升级CentOS 7到8时候broken了7系统导致的。
检查发现当前系统使用的 rpm 版本还是el7使用的 rpm-4.11.3-43.el7.x86_64
,似乎是这个版本没有满足要求,所以先升级rpm:
dnf upgrade --best --allowerasing rpm
但是上述会遇到很多文件冲突:
file /usr/lib/python3.6/site-packages/setuptools/command/__pycache__/upload_docs.cpython-36.pyc from install of platform-python-setuptools-39.2.0-5.el8.noarch conflicts with file from package python3-setuptools-39.2.0-10.el7.noarch file /usr/lib/python3.6/site-packages/rpmconf/__pycache__/__init__.cpython-36.opt-1.pyc from install of python3-rpmconf-1.0.21-1.el8.noarch conflicts with file from package python36-rpmconf-1.0.22-1.el7.noarch
这是因为,CentOS 7 的软件包 python36-rpmconf
到 CentOS 8改成了 python3-rpmconf
,所以由于包名字不同,所以没有对应进行升级,导致了文件冲突。注意类似和rpm相关到依赖不能直接卸载否则会导致rpm无法正常工作,所以改成删除 python36-rpmconf
包信息但是不实际删除文件:
rpm -e --justdb python36-rpmconf-1.0.22-1.el7.noarch rpmconf-1.0.22-1.el7.noarch rpm -e --justdb --nodeps python3-setuptools-39.2.0-10.el7.noarch #rpm -e --justdb --nodeps python3-pip-9.0.3-7.el7_7.noarch rpm -e --justdb --nodeps python3-pip-9.0.3-8.el7.noarch #rpm -e --justdb --nodeps iptables-1.4.21-34.el7.x86_64 rpm -e --justdb --nodeps iptables-1.4.21-35.el7.x86_64 rpm -e --justdb --nodeps vim-minimal
备注
CentOS 7到CentOS 8中,有包名字修改的有:
python36-rpmconf => python3-rpmconf python3-setuptools => platform-python-setuptools vim-minimal (CentOS 7) 和 vim-common (CentOS 8)冲突
备注
rpm -e --justdb --nodeps vim-minimal
会遇到卡死问题,实际上此时是rpm的数据库损坏了,需要强制杀掉 kill -9
这个卡住的rpm命令,然后执行一次 rpm --rebuilddb
修复,再继续进行安装。
-
然后重新执行一次升级rpm:
dnf upgrade --best --allowerasing rpm
备注
在 How to Upgrade Centos 7 to 8 的comments中,stafwag提出解决方法是删除 gcc 和所有 devel 软件包:
rpm -qa | grep -i devel | xargs -n 1 dnf remove -y
但是我验证这个方法没有成功,所以还是采用我自己摸索出来的方法。
-
然后再次执行CentOS 8升级就可以成功:
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
-
安装CentOS 8的新Kernel Core:
dnf -y reinstall kernel-core
备注
这里比较奇怪,虽然 /boot
目录下没有 vmlinuz-4.18.0-147.8.1.el8_1.x86_64
文件,显示内核并没有安装成功。但是系统提示我 kernel-core
已经安装,所以我采用的是 reinstall
指令。
-
最后安装CentOS 8最小化包:
dnf -y groupupdate "Core" "Minimal Install"
备注
这里会提示需要安装的 rsyslog 和 syslog-ng 冲突(原因是原先CentOS 7安装的是syslog-ng,虽然升级到了CentOS 8版本,但是和CentOS 8的rsyslog冲突),所以我先卸载syslog-ng,然后再重新执行上述CentOS 8最小化包安装:
rpm -e syslog-ng-3.23.1-1.el8.x86_64
-
现在可以检查CentOS版本信息:
cat /etc/redhat-release
备注
注意,上述步骤中每一步都需要仔细检查是否正确执行,千万不能跳过失败都步骤,否则会导致升级错乱失败。
到目前为止,已经完成了CentOS 7升级到CentOS 8的过程。
添加优麒麟的软件仓库(可以略过)
自动添加。
从以下地址下载 KeyRing 的 deb 包后安装即可。
http://archive.ubuntukylin.com/ukui/pool/main/u/ukui-keyring/
http://archive.ubuntukylin.com/ukui/pool/main/k/kylin-software-keyring/
更新仓库
apt update
更新系统
apt full-upgrade
将当前用户添加到 sudoer
如果 sudo 不生效,请执行以下步骤。
获取 /etc/sudoers 文件的写权限
# chmod u+w /etc/sudoers
编辑配置文件
# nano /etc/sudoers
在 % sudo ALL = (ALL:ALL) ALL 这一行下边加入自己的用户名,比如 user。
user ALL=(ALL:ALL) ALL
保存退出。
修改 /etc/sudoers 文件属性为只读。这时就可以使用 sudo 命令了。
sudo chmod -w /etc/sudoers
添加中文支持
安装 locales 用来设置语言支持。
apt install locales
运行 LOCALE 命令检查当前的 LOCALE 环境
locale
然后进行配置,命令为:
dpkg-reconfigure locales
这里的配置按键
- 空格键是 “选择”
- TAB 键是 “切换”
- Enter 键(回车键)是 “确认”
注意
这里,粗心的人如果没看清楚界面上的使用说明,就会被小坑一把,如果直接按了回车键,就跳到了默认语言设置页面,导致配置中文失败。
对于我们来说,选择以下几种编码已经够用:
- en_US.UTF-8 UTF-8
- zh_CN GB2312
- zh_CN.GB18030 GB18030
- zh_CN.GBK GBK
- zh_CN.UTF-8 UTF-8
回车键,转跳至默认语言设置页面
在设置默认编码时选择:zh_CN.UTF-8
回车键确认,出现下方
Generating locales (this might take a while)...
en_US.UTF-8... done
zh_CN.GB2312... done
zh_CN.GBK... done
zh_CN.UTF-8... done
Generation complete.
出现 Generation complete. 即表示生成完成。
时区
我们把时区改到中国使用的东 8 区。
apt install tzdata
如果已经安装了 tzdata 则执行以下命令。
dpkg-reconfigure tzdata
选择 “Asia”、“Shanghai”。
地理位置同样选择 “Asia”。
字体
如果缺少字体,遇到中文显示就会乱码,因此要安装至少一种中文字体。
dnf install google-noto-sans-cjk-ttc-fonts google-noto-serif-cjk-ttc-fonts
WineHQ
apt install wine wine-stable winetricks zenity
详细的使用方法请参考《Wine 的使用指南》,https://my.oschina.net/chipo/blog/5178667
Lutris
如果搭建游戏运行环境,建议把 Ubuntu 从 20.04 升级到 22.04 然后安装 Lutris 。
apt install lutris
参考文献
《升级 CentOS 7 到 CentOS 8》https://cloud-atlas.readthedocs.io/zh-cn/latest/linux/redhat_linux/centos/upgrade_centos_7_to_8.html