CentOS 是一个不错的 Linux Distribution, 它是我最喜欢的公司之一 RedHat 发布的 RHEL 重编译的. 几个月前自己组装了一台台机, 在 FreeBSDCentOS 之间徘徊了好久后, 终于决定还是用 CentOS 完事.

安装完毕若干天后重启, 发现有一些问题... 启动失败了! 经过若干小时的痛苦打 patch, 终于让系统变得正常一点了.

CentOS 7 的下载页面是 此处, 因为以后 CentOS 官方还可能有更新ISO, 所以在 fix 之前请注意它是否已经被更新过了.

grub 配置的问题

一般情况下我们使用 grub2-mkconfig 来重新配置 grub 的配置文件, 但是本 ISO 可能有问题, 导致最新的 boot image 没有找到, 因此根据此处提出的 fix 方法介绍, 此处提出的 patch, 修改如下.

首先备份文件/usr/share/grub/grub-mkconfig_lib, 编辑 & 增加一个 patch 文件. 命令如下:

# cp -a /usr/share/grub/grub-mkconfig_lib /usr/share/grub/grub-mkconfig_lib.orig
# vi /tmp/grub-mkconfig_lib.patch

patch 文件内容如下 :

--- a/util/grub-mkconfig_lib.in 2014-06-30 16:16:11.000000000 +0000
+++ a/util/grub-mkconfig_lib.in 2014-12-08 23:05:56.936903046 +0000
@@ -263,13 +263,14 @@

version_find_latest ()
{
-  version_find_latest_a=""
-  for i in "$@" ; do
-    if version_test_gt "$i" "$version_find_latest_a" ; then
-      version_find_latest_a="$i"
-    fi
-  done
-  echo "$version_find_latest_a"
+  {
+    for i in "$@"; do
+      echo $i
+    done | grep -v rescue | sed 's/.x86_64$//g' | sort -V -r | sed 's/$/.x86_64/g'
+    for i in "$@"; do
+      echo $i
+    done | grep rescue | sort -V
+  } | head -n 1
}

apply 此 patch.

# patch -b /usr/share/grub/grub-mkconfig_lib /tmp/grub-mkconfig_lib.patch
patching file /usr/share/grub/grub-mkconfig_lib

当然, 如果条件有限, 也可以直接编辑文件, 备份后, 到 /usr/share/grub/grub-mkconfig_lib 目录, 修改version_find_latest 这个 function.

EFI 文件找不到的问题

CentOS 7 UEFI 在 /boot/efi/EFI 目录下有 BOOT, centos 和 redhat 三个子目录. 需要将 redhat/shim.efi 复制一份到 centos 目录下.

效果如下:

[root@yuik EFI]# tree
.
├── BOOT
│   ├── BOOTX64.EFI
│   └── fallback.efi
├── centos
│   ├── fonts
│   │   └── unicode.pf2
│   ├── gcdx64.efi
│   ├── grub.cfg
│   ├── grubenv
│   ├── grubx64.efi
│   └── shim.efi
└── redhat
    ├── BOOT.CSV
    ├── MokManager.efi
    ├── shim.efi
    └── shim-redhat.efi

4 directories, 12 files

References:

Categories: Code

Yu

Ideals are like the stars: we never reach them, but like the mariners of the sea, we chart our course by them.

Leave a Reply

Your email address will not be published. Required fields are marked *