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

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