From f061db2087431bfd4e238dea53d1faf1c2510cd0 Mon Sep 17 00:00:00 2001 From: "Xu, Shunxuan" Date: Wed, 18 Apr 2018 16:24:17 +0800 Subject: [PATCH] =?UTF-8?q?[Bug=20#3554]=20=E5=8D=87=E7=BA=A7700=E7=89=88?= =?UTF-8?q?=E5=86=85=E6=A0=B8=E5=88=B0=E5=85=89=E7=9B=98=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=8A=E7=B3=BB=E7=BB=9F=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改: README.md 新文件: record-update-to-700.md Signed-off-by: Xu, Shunxuan --- README.md | 2 + record-update-to-700.md | 309 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 311 insertions(+) create mode 100644 record-update-to-700.md diff --git a/README.md b/README.md index 23140d0..e473546 100755 --- a/README.md +++ b/README.md @@ -40,3 +40,5 @@ ## [内核升级操作](update_kernel.md) ## [公司邮箱服务器搭建](mail-doc/mail搭建公司邮箱/公司邮箱搭建.md) + +## [升级700内核到光盘环境及系统环境](record-update-to-700.md) diff --git a/record-update-to-700.md b/record-update-to-700.md new file mode 100644 index 0000000..c1f6885 --- /dev/null +++ b/record-update-to-700.md @@ -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: +install_cfg.xml: +install_cfg.xml: +install-d5000.xml: +install.xml: +``` + +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 +``` + +