2020年底,CentOS 就完全宣告生命週期終止,連更新安裝都沒辦法了。2021年9月,使用者說他必須裝 6.9 才能跑所需的軟體,只好再來努力的裝。
硬體資訊
網卡及顯卡為
Ethernet controller: Intel Corporation Ethernet Connection (11) I219-LM
Ethernet controller: Intel Corporation Ethernet Controller I225-LM (rev 02)
VGA compatible controller: Intel Corporation CometLake-S GT2 [UHD Graphics 630] (rev 05)
開機磁碟為 m2 SSD。
依據 Intel 的說明,Intel Gigabit 網路連線有三個 Linux* 基礎驅動程式:
- igb-x.x.x.tar.gz 驅動程式:支援所有 82575/6、82580、I350、I354 和 I210/I211 型的 gigabit 網路連線。
- e1000e-x.x.x.x.tar.gz 驅動程式:支援 Intel® PRO/1000 PCI-E (82563/6/7、82571/2/3/4/7/8/9 或 82583) I217/I218/I219 型的 gigabit 網路介面卡。
- e1000-x.x.x.tar.gz 驅動程式:支援 Intel® PRO/1000 PCI 和 PCI-X 系列的 gigabit 網路連線。
其中 I225 ,Intel 只提供 Win 64 的 driver,Linux 由 kernel 提供,模組名稱為 igc。
安裝經過
使用者僅說要裝 CentOS,但未指定要安那個版本,考慮 CentOS 8 很快就不再維護了,最先裝 CentOS 7。CentOS 7 裝好後,只有 I225 的網卡會動,不過重開機後又不動了,必需把網路線拔掉再重插,即可連上網路。I219 則完全不動,載入 e1000e 的 driver 也偵測不到網卡。只好改裝 CentOS 8,裝好後,兩個網卡都可正常運作。
不過使用者拿回去後,過了幾天就說要改裝 CentOS 6.9 才行,只好經歷重重難關來安裝 CentOS 6.9。
安裝 CentOS 6.9
在官網上說,自 CentOS 6.5 以後,就可以用 USB 隨身碟安裝。但試了用 dd 寫入 USB disk 或用 Rufus 寫都無法成功開機。注意,用 Rufus 將 ISO 檔寫入隨身碟時,要選 ISO 模式。更慘的是,先前可以用光碟片安裝,這次連安裝光碟片都無法開機,只好想其他辦法安裝。最後決定在 VM 中先裝好,再想辦法複製過去。
不敢執行更新,但也無法執行 yum install xxxx ,必須要修改 /etc/yum.repos.d/CentOS-Base.repo 的設定,指向 vault.centos.org,用下列指令一次搞定。
sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror.centos.org\/centos\/$releasever\//baseurl=http:\/\/vault.centos.org\/6.10\//g' /etc/yum.repos.d/CentOS-Base.repo
再重新執行安裝。
槮器太新,連 CentOS 都無法正常啟動網路,一定要裝 Intel 的驅動程式,要先裝 devel-tool。
因為要裝最新的網卡驅動程式,必須安裝新版的 gcc。
因授權問題,網卡驅動程式必須手動下載。
使用 cpio 複製系統,用 USB 隨身碟,速度很慢很慢 ...
複製系統磁區
mount /dev/sdd1 /mnt/src
mount /dev/nvme0n1p1 /mnt/dst
cd /mnt/src
find ./ -xdev -print0 | cpio -pa0V /mnt/dst
cd /mnt
umount /mnt/src
umount /mnt/dst
mount /dev/sdd2 /mnt/src
mount /dev/nvme0n1p2 /mnt/dst
cd /mnt/src
find ./ -xdev -print0 | cpio -pa0V /mnt/dst
cd /mnt
umount /mnt/src
umount /mnt/dst
使用 chroot 進入目標磁碟,建立 grub
mkdir /mnt/sysimage
mount /dev/nvme0n1p2 /mnt/sysimage
mount /dev/nvme0n1p1 /mnt/sysimage/boot
mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
chroot /mnt/sysimage
source /etc/profile
export PS1="(chroot) ${PS1}"
#######
# 進入 chroot 後,安裝 grub
#######
grub-install --target=i386-pc /dev/nvme0n1
grub-mkconfig -o /boot/grub/grub.cfg
### 記得修改 /etc/fstab ###
最前面要留約 2MB 的空間,建立 grub boot 資料,不然會出現像下面的錯誤。 可以先建一個 2MB 的分割區,等全部分割區都建好後,再把最前面的分割區刪除。
# grub-install --target=i386-pc /dev/nvme0n1
Installing for i386-pc platform.
grub-install: warning: your embedding area is unusually small. core.img won't fit in it..
grub-install: warning: 不可能內嵌。GRUB 在本設置中僅能藉由區塊清單來安裝。然而,使用區塊清單不僅「不可靠」甚至令人挫折。.
grub-install:錯誤: 不會繼續處理區塊清單.
CentOS 6.9 使用 GRUB 0.97,系統裝在 nvme SSD,開機時會出現下面的錯誤。
----------------------------
grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> find /boot/grub/stage1
find /boot/grub/stage1
Error 15: File not found
---------------------------------------------
所以 CentOS 6.9 不支援 nvme SSD開機。但是 CentOS 7 可以開機,因此將 GRUB 升級至 2.0 版。試著下載不同版本來測試,可安裝的最高版本是 2.02。
到 http://ftp.gnu.org/gnu/grub/ 下載 grub-2.02。要先安裝 bison 才能編譯。
yum install bison
wget http://ftp.gnu.org/gnu/grub/grub-2.02.tar.gz
tar xvfz grub-2.02.tar.gz
cd grub-2.02
./configure
make -j4
make install
- yum install gcc gcc-c++
- yum install svn texinfo-tex flex zip libgcc.i686 glibc-devel.i686
- svn ls svn://gcc.gnu.org/svn/gcc/tags | grep gcc | grep release
- cd ~/cent6-install
- svn co svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_5_release/ (這個會花很多時間)
- cd gcc_4_8_5_release/
- ./contrib/download_prerequisites
- cd ..
- mkdir gcc_4_8_5_build/
- cd gcc_4_8_5_build/
- ../gcc_4_8_5_release/configure --prefix=/usr/local/gcc-4.8.5 --enable-languages=c,c++
- make -j6,約 40分鐘
- sudo make install
- echo "/usr/local/lib64" > gcc-4.8.5.conf
- sudo mv gcc-4.8.5.conf /etc/ld.so.conf.d/
- sudo ldconfig,會出錯,不管它 -- ldconfig: /usr/local/gcc-4.8.5/lib64/libstdc++.so.6.0.19-gdb.py 不是一個 ELF 檔 - 其開頭的魔術位元組是錯的。
libgcc.i686 和 glibc-devel.i686 => 要同時安裝 32 和 64 的版本
------------------------------------------------
svn ls svn://gcc.gnu.org/svn/gcc/tags | grep gcc | grep release
.....
gcc_4_8_3_release/
gcc_4_8_4_release/
gcc_4_8_5_release/
gcc_4_9_0_release/
gcc_4_9_1_release/
.....
sudo vi /etc/profile.d/gcc_485_env.sh
PATH=/usr/local/gcc-4.8.5/bin:$PATH
source /etc/profile.d/gcc_485_env.sh
gcc --version
gcc (GCC) 4.8.5
-------------------------------------------
參考 CentOS 7,安裝 gcc-4.8.5 及 grub-2.0.2
預設是 enable multilib,不管它
--prefix=/usr/local/gcc-4.8.5
新版本最終安裝的目錄,不然會裝到 /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.8.5
-----------------------------------------
下載 kernel-devel-2.6.32-696.el6.x86_64.rpm
sudo yum install kernel-devel-2.6.32-696.el6.x86_64.rpm
tar xvfz e1000e-3.8.4.tar.gz
make
common.mk:85: *** Kernel header files not in any of the expected locations.
(要先裝 kernel header,不然會出錯)
/home/ntu/cent6-install/e1000e-3.8.4/src/netdev.c:7788:57: 錯誤:「dev」 undeclared (first use in this function)
struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
修正 netdev.c
make 成功
sudo make install
----------------------------------------------------
https://sourceforge.net/p/e1000/bugs/656/
編譯 e1000e 3.8.4,netdev.c 有一行程式要改
原來
struct net_device netdev = pci_get_drvdata(to_pci_dev(dev));
修改成
struct net_device netdev = pci_get_drvdata(pdev);
------------------------------------
tar xvfz grub-2.02.tar.gz
cd grub-2.02
==> configure: error: bison is not found,sudo yum install bison
make
sudo -i => 切換到 管理者,不然 make install 會失敗
make install
-------------------------------------------
編譯 grub 的問題,要使用自己定義的 alignof,不能使用 gcc 的 stdalign.h 的定義
#define alignof(type) offsetof (struct { char c; type x; }, x)
到 kernel 5 之後,才支援 I225
sh -c 'yes "" | make oldconfig'
sudo yum install ncurses-devel openssl-devel
Avoid speculative indirect branches in kernel (RETPOLINE) ==> OFF
https://www.kernel.org/doc/html/latest/process/changes.html
幾乎不可能,還是放棄吧
使用 USB 磁碟安裝
新機器很強,考慮直接在新機器用 USB 磁碟開機,再用 Vmware 的 VM 安裝 CentOS 6.9。USB 磁碟使用 240GB 的 SSD 就很足夠了,裝的是 Ubuntu 18。BIOS 的 CSM 要設成 Legacy,VTx 的 VM支援功能要 enable。然後就可以在新機器上直接進行上述的動作了。
另外,USB 上的 OS 要裝 ssh, xrdp, build-essential,其中 xrdp 可以透過 remote desk 來遠端操作。Ubuntu 要另外安裝 ssh 才能啟動 sshd 服務。Vmare 則需要 gcc 用來安裝 kernel module。
遠端 SSH 連線
無法連線,要加參數才行
ajax@aj-i9 ~ $ ssh ntu@10.161.91.142
Unable to negotiate with 10.161.91.142 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
ajax@aj-i9 ~ $ ssh -o HostKeyAlgorithms\ ssh-rsa ntu@10.161.91.142
The authenticity of host '10.161.91.142 (10.161.91.142)' can't be established.
RSA key fingerprint is SHA256:3VMP62P2ny4P0tOWMjXPGMOWBDhAbzb+pP91J0kcAm4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.161.91.142' (RSA) to the list of known hosts.
ntu@10.161.91.142's password:
Last login: Tue Jul 5 16:37:45 2022 from 10.161.91.142
[ntu@localhost ~]$