Merge branch '4.2/3554' into 'master'

[Bug #3554] 升级700版内核到光盘环境及系统环境

See merge request linx6.0.42/documents!1
This commit is contained in:
徐顺选
2018-04-18 16:49:42 +08:00
2 changed files with 311 additions and 0 deletions

View File

@@ -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
View 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
```