Merge branch '4.2/3554' into 'master'
[Bug #3554] 升级700版内核到光盘环境及系统环境 See merge request linx6.0.42/documents!1
This commit is contained in:
@@ -40,3 +40,5 @@
|
||||
## [内核升级操作](update_kernel.md)
|
||||
|
||||
## [公司邮箱服务器搭建](mail-doc/mail搭建公司邮箱/公司邮箱搭建.md)
|
||||
|
||||
## [升级700内核到光盘环境及系统环境](record-update-to-700.md)
|
||||
|
||||
309
record-update-to-700.md
Normal file
309
record-update-to-700.md
Normal file
@@ -0,0 +1,309 @@
|
||||
# 制作700版升级内核的4.2系统镜像 #
|
||||
|
||||
在最新42发布版的基础上,更换系统环境和光盘环境的内核为2.6.32.700
|
||||
|
||||
出一版单独的700版内核安装盘。
|
||||
|
||||
## 1 准备工作 ##
|
||||
|
||||
### 1.1 环境及制作工具准备 ###
|
||||
|
||||
60操作系统。(在60系统上制作镜像)
|
||||
|
||||
创建workdir工作目录。创建镜像内容目录cd。
|
||||
|
||||
```
|
||||
mkdir workdir
|
||||
cd workdir
|
||||
mkdir cd
|
||||
```
|
||||
|
||||
制作镜像的工具:mk_iso_4.2.sh (注意:脚本中的所涉及的文件及命令,自行安装。)
|
||||
|
||||
```
|
||||
cat workdir/mk_iso_4.2.sh
|
||||
#!/bin/bash
|
||||
# shiftwidth=4 tabstop=4
|
||||
|
||||
isopath="$1"
|
||||
output="$2"
|
||||
|
||||
/opt/xorriso -as genisoimage -r -checksum_algorithm_iso md5,sha1 -V `cat ${isopath}/tag| cut -b1-32` -o ${output} -J -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin -partition_offset 16 -J -cache-inodes -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table $isopath
|
||||
```
|
||||
|
||||
### 1.2 制作所需的包及基础盘 ###
|
||||
|
||||
1. 最新的42发布版镜像。(在60系统上制作镜像)
|
||||
|
||||
2. 修改过的udev164安装包。(修改包中的启动脚本,在start末尾添加创建/dev/shm)
|
||||
|
||||
```
|
||||
if [ -d /dev/shm ];then
|
||||
mkdir --mode=755 /dev/shm
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
```
|
||||
|
||||
修改sbin/start_udev脚本(修改脚本最后两行,164中没有udevtrigger和udevsettle)
|
||||
|
||||
```
|
||||
/sbin/udevadm trigger
|
||||
/sbin/udevadm settle
|
||||
```
|
||||
|
||||
|
||||
3. 最新编译的700版内核包:
|
||||
|
||||
编译内核会生成6个包,3个系统环境的内核包、3个光盘环境的内核包。(kernel-image/kernel-header/kernel-source 其中内核制作及修改后续会有记录)
|
||||
|
||||
此六个内核包,光盘环境和系统环境区别只有序列号的添加与否。系统环境需要全装,光盘环境建议只安装kernel-image即可。
|
||||
|
||||
4. 内核对应的linux-firmware
|
||||
|
||||
此包为linx6.0.76上的kernel-firmware-2.6.32-696.el6.noarch.rpm,解压后重新打包为linux-firmware#20180326-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
|
||||
## 2 镜像修改制作 ##
|
||||
|
||||
为便于查看修改及便于理解,建议只在workdir目录下进行工作。
|
||||
|
||||
准备好的workdir下的目录及文件:
|
||||
|
||||
```
|
||||
cd
|
||||
mnt
|
||||
mk_iso_4.2.sh
|
||||
rocky6.0.42.41-x86_64-security-20171028.iso
|
||||
./base/kernel-image#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./base/kernel-source#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./base/kernel-header#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./security/linux-firmware#20180326-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./security/kernel-image#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./security/kernel-source#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
./security/kernel-header#2.6.32.700-x86_64-linx-Rocky4.2.pkg.tar.gz
|
||||
udev#164-x86_64-linx2-Rocky4.2.pkg.tar.gz
|
||||
```
|
||||
|
||||
### 2.1 光盘环境修改 ###
|
||||
|
||||
#### 2.1.1 准备光盘环境 ####
|
||||
|
||||
```
|
||||
mount rocky6.0.42.41-x86_64-security-20171028.iso ./mnt -oloop
|
||||
cp ./mnt/. ./cd -R
|
||||
```
|
||||
|
||||
#### 2.1.2 更换光盘环境和系统环境包 ####
|
||||
|
||||
1. 替换系统环境内核、udev164、linux-firmware及删掉update-drivers包(此包对应原内核,与此内核不匹配)。
|
||||
|
||||
```
|
||||
rm cd/Rocky/packages/kernel-*
|
||||
rm cd/Rocky/packages/udev#*
|
||||
rm cd/Rocky/packages/linux-firmware#*
|
||||
rm cd/Rocky/packages/update-drivers#*
|
||||
cp security/kernel-* cd/Rocky/packages/
|
||||
cp security/linux-firmware#* cd/Rocky/packages/
|
||||
cp udev#164* cd/Rocky/packages/
|
||||
```
|
||||
|
||||
删除update-drivers包需要同时修改安装程序中的安装此包的列表。
|
||||
|
||||
需要修改的位置如下,修改时注意格式(可能要调下空行)。
|
||||
```
|
||||
usr/lib/new_install/xml$ grep update-drivers *
|
||||
dependency.xml: <package group="base" install="mandatory" iso_env="install" layer="above_floor" name="update-drivers" sys_env="install" version="20140806">
|
||||
install_cfg.xml:<package name='update-drivers'/>
|
||||
install_cfg.xml: <including install='mandatory' package='update-drivers'/>
|
||||
install-d5000.xml: <package name='update-drivers'/>
|
||||
install.xml: <package name='update-drivers'/>
|
||||
```
|
||||
|
||||
2. 替换光盘环境包
|
||||
|
||||
换udev
|
||||
|
||||
chroot到光盘环境下、pkgrm掉要替换的包
|
||||
|
||||
```
|
||||
pkgrm udev
|
||||
pkgadd Rocky/packages/udev#164...
|
||||
|
||||
```
|
||||
换内核
|
||||
|
||||
退出chroot,删除光盘环境下的内核安装目录及文件,然后需要解压base/kernel-image#...拷贝需要的内核文件及目录到到光盘环境下。
|
||||
|
||||
```
|
||||
rm /boot/config-* kernel_src_info isolinux/initrd.img isolinux/vmlinuz isolinux/System.map
|
||||
rm /lib/modules/2.6.32.41-Rocky4.2-x86_64 -rf
|
||||
rm /usr/src/linux-2.6.32.41
|
||||
tar -xf base/kernel-image#... -C base/ki
|
||||
cp base/ki/boot/config* cd/boot
|
||||
cp base/ki/boot/kernel_src_info cd/boot
|
||||
cp base/ki/boot/System.map-2.6.32.700... cd/boot/isolinux/System.map
|
||||
cp base/ki/boot/initrd-2.6.32.700... cd/boot/isolinux/initrd.img
|
||||
cp base/ki/boot/vmlinuz-2.6.32.700... cd/boot/isolinux/vmlinuz
|
||||
cp base/ki/lib/modules/2.6.32.700... cd/lib/modules/ -ra
|
||||
```
|
||||
|
||||
换linux-firmware
|
||||
|
||||
直接将linux-firmware包解压,然后拷贝解压的目录lib/firmware覆盖到cd/lib/firmware
|
||||
|
||||
|
||||
#### 2.1.3 修改initrd及安装程序 ####
|
||||
|
||||
1. initrd的修改内容
|
||||
|
||||
添加usb驱动,(发现usb口无法使用,键盘无反应u盘没认到)
|
||||
|
||||
将光盘环境的usb驱动添加到initrd中。
|
||||
|
||||
```
|
||||
cd cd/boot/isolinux/
|
||||
mkdir work
|
||||
cd work
|
||||
gunzip -cd ../initrd.img | cpio -iumd
|
||||
cp ../../../lib/modules/2.6.32.700-Rocky4.2-x86_64/kernel/drivers/usb/* ./lib/modules/2.6.32.700-Rocky4.2-x86_64/kernel/drivers/usb/ -ra
|
||||
depmod -a -b ./ 2.6.32.700-Rocky4.2-x86_64
|
||||
```
|
||||
|
||||
修改udev规则及拷贝udev164的cdrom_id到lib/udev下(此项待确定)。新加的init脚本中调用local时,里面有创建cdrom软链接,此处创建规则暂不添加,待测。(已测,可不添加)
|
||||
|
||||
local中添加扫描确认镜像文件的脚本内容,此块内容为在41系统的initrd中找到并修改后添加的。local中的修改diff:
|
||||
|
||||
```
|
||||
diff -Nurp /0327/b/ki/boot/work/scripts/functions ./scripts/functions
|
||||
--- /0327/b/ki/boot/work/scripts/functions 2018-03-26 10:32:28.000000000 +0800
|
||||
+++ ./scripts/functions 2018-04-11 16:45:10.000000000 +0800
|
||||
@@ -6,6 +6,11 @@ _log_msg()
|
||||
printf "$@"
|
||||
}
|
||||
|
||||
+log_info_msg()
|
||||
+{
|
||||
+ _log_msg "Infomation: $@\n"
|
||||
+}
|
||||
+
|
||||
log_success_msg()
|
||||
{
|
||||
_log_msg "Success: $@\n"
|
||||
diff -Nurp /0327/b/ki/boot/work/scripts/local ./scripts/local
|
||||
--- /0327/b/ki/boot/work/scripts/local 2018-03-26 10:32:28.000000000 +0800
|
||||
+++ ./scripts/local 2018-04-13 16:14:37.000000000 +0800
|
||||
@@ -50,6 +50,67 @@ pre_mountroot()
|
||||
/sbin/usplash_write "TIMEOUT 15" || true
|
||||
fi
|
||||
fi
|
||||
+
|
||||
+ local check_flag="false"
|
||||
+ mkdir -p /.tmpfs/.cdrom
|
||||
+ if [ "${ROOT}" == "/dev/cdrom" ]; then
|
||||
+ #echo "**********************************"
|
||||
+ #echo "Locating cdrom for installing"
|
||||
+ #echo "**********************************"
|
||||
+ CDROM_DEVICES="`grep 'drive name:' /proc/sys/dev/cdrom/info | cut -d: -f2`"
|
||||
+ for DEV in $CDROM_DEVICES
|
||||
+ do
|
||||
+ DEV="/dev/$DEV"
|
||||
+ mount -r -t iso9660 $DEV /.tmpfs/.cdrom 2>&1 > /dev/null
|
||||
+ if [ $? -eq 0 ]
|
||||
+ then
|
||||
+ if [ -e /.tmpfs/.cdrom/tag ]
|
||||
+ then
|
||||
+ ln -sf $DEV /dev/cdrom
|
||||
+# REAL_ROOT="${ROOT}"
|
||||
+ check_flag="true"
|
||||
+ umount /.tmpfs/.cdrom
|
||||
+ rm /.tmpfs -rf
|
||||
+ break
|
||||
+ fi
|
||||
+ else
|
||||
+ check_flag="false"
|
||||
+ log_warning_msg "try to mount cdrom: /dev/$DEV failed."
|
||||
+ fi
|
||||
+ done
|
||||
+ fi
|
||||
+ # check usb disk
|
||||
+ if [ "${check_flag}" == "false" ];then
|
||||
+
|
||||
+ cat /proc/modules | grep usb_storage
|
||||
+ if [ 0 != $? ];then
|
||||
+ modprobe usb-storage 2>&1 > /dev/null
|
||||
+ fi
|
||||
+
|
||||
+ USB_DEVICES=$(list-devices usb-partition)
|
||||
+ for DEV in $USB_DEVICES;do
|
||||
+ if mount -r -t iso9660 $DEV /.tmpfs/.cdrom;then
|
||||
+ if [ -e /.tmpfs/.cdrom/tag ]; then
|
||||
+# REAL_ROOT="${DEV}"
|
||||
+ ROOT="${DEV}"
|
||||
+ check_flag="true"
|
||||
+ umount /.tmpfs/.cdrom
|
||||
+ rm /.tmpfs -rf
|
||||
+ break
|
||||
+ else
|
||||
+ check_flag="false"
|
||||
+ fi
|
||||
+ log_warning_msg "$DEV on usb disk is not rocky 4.2 iso."
|
||||
+ else
|
||||
+ check_flag="false"
|
||||
+ log_warning_msg "try to mount cdrom on usb disk: $DEV failed."
|
||||
+ fi
|
||||
+ done
|
||||
+ fi
|
||||
+ # Get the root filesystem type
|
||||
+ if [ "${check_flag}" == "false" ]; then
|
||||
+ panic "ALERT! root device: ${REAL_ROOT} does not exist. Dropping to a shell!"
|
||||
+ fi
|
||||
|
||||
# We've given up, but we'll let the user fix matters if they can
|
||||
while [ ! -e "${ROOT}" ]; do
|
||||
@@ -113,6 +174,10 @@ mountroot()
|
||||
mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
|
||||
fi
|
||||
|
||||
+# if ! mount ${roflag} ${REAL_ROOT} ${rootmnt};then
|
||||
+# panic "MOUNT ERROR! mount ${roflag} ${REAL_ROOT} ${rootmnt}. Dropping to a shell."
|
||||
+# fi
|
||||
+
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
|
||||
run_scripts /scripts/local-bottom
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
```
|
||||
|
||||
local中添加的内容,调用list-devices脚本,从41原镜像中拷贝到bin下
|
||||
|
||||
|
||||
|
||||
|
||||
2. 修改安装程序中的udev命令
|
||||
|
||||
udev164中没有udevinfo的命令,修改udevinfo为 udevadm info
|
||||
cd/usr/lib/new_install/operation/functions
|
||||
|
||||
|
||||
## 关于内核过大需要stripped ##
|
||||
|
||||
initrd stripped
|
||||
|
||||
```
|
||||
cd/boot/isolinux/work/lib/modules/2.6.32.700-Rocky4.2-x86_64/kernel# find -name *.ko | while read f;do strip --strip-debug $f;done
|
||||
cd/boot/isolinux/work# depmod -a -b ./ 2.6.32.700-Rocky4.2-x86_64
|
||||
```
|
||||
|
||||
光盘环境stripped
|
||||
|
||||
```
|
||||
root@linx:/0327/cd/lib/modules/2.6.32.700-Rocky4.2-x86_64/kernel# find -name *.ko | while read f;do strip --strip-debug $f;done
|
||||
root@linx:/0327/cd/lib/modules/2.6.32.700-Rocky4.2-x86_64/kernel# cd ../..
|
||||
root@linx:/0327/cd/lib/modules# ls
|
||||
2.6.32.700-Rocky4.2-x86_64
|
||||
root@linx:/0327/cd/lib/modules# cd ../..
|
||||
root@linx:/0327/cd# depmod -a -b ./ 2.6.32.700-Rocky4.2-x86_64
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user