ExaGear 中附带的 CentOS 运行环境

环境

操作系统: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章