注意!!!
如果有内核deb包,定制内核名,基本镜像中的内核包名,宿主机内核包名要一致,否则会定制失败
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
| #!/bin/bash
ISO_SOURCE_URL=https://cdimage.uniontech.com/iso-v20/uniontechos-desktop-20-professional-1022_arm64.iso
ISO_SOURCE_PATH=cdimage
ISO_SOURCE_NAME=uniontechos-desktop-20-professional-1022_arm64.iso
ISO_DEST_PATH=cdimage
ISO_DEST_NAME=uniontechos-desktop-20-professional-1022_arm64-oem.iso
DEBS_PATH=debs
DEBS_KERNEL_PATH=debs_kernel
DEBS_KERNEL_RELEASE=`uname -r` DEBS_KERNEL_VERSION=4.19.90-2001
TEMP_ISO=iso
TEMP_ROOTFS=rootfs
USER=$(env | grep ^USER | cut -d "=" -f 2) if [ $USER != "root" ];then echo "请用root权限执行此脚本!" exit fi
if [ $# -eq 0 ];then echo "用法: 1)$0 config 配置环境 2)将内核deb包放入 $DEBS_KERNEL_PATH 中去 3)将其它deb包放入 $DEBS_PATH 中去 4)$0 build 定制镜像" exit fi
if [ $# -eq 1 ] && [ $1 == "config" ];then echo "====开始配置OEM环境"
echo "====安装定制oem所需的依赖软件" apt install -y squashfs-tools dpkg-dev xorriso wget mkdir -m 777 -pv $ISO_SOURCE_PATH $ISO_DEST_PATH $DEBS_PATH $DEBS_KERNEL_PATH echo "文件夹创建成功" echo "请把内核deb包放在$DEBS_KERNEL_PATH中" echo "请把其它deb包放在$DEBS_PATH"
echo "====下载基本镜像$ISO_SOURCE_NAME到$ISO_SOURCE_PATH目录中去" if [ ! -e $ISO_SOURCE_PATH/$ISO_SOURCE_NAME ];then wget --no-check-certificate $ISO_SOURCE_URL -O $ISO_SOURCE_PATH/$ISO_SOURCE_NAME fi exit fi
if [ $# -eq 1 ] && [ $1 == "build" ];then echo "====开始制作OEM镜像"
if [ -d $DEBS_KERNEL_PATH ];then if [ -z $DEBS_KERNEL_RELEASE ] || [ -z $DEBS_KERNEL_VERSION ];then echo "$DEBS_KERNEL_RELEASE 或者 $DEBS_KERNEL_VERSION 配置有误" exit fi
DEBS_LINUX_IMAGE=linux-image-${DEBS_KERNEL_RELEASE}_${DEBS_KERNEL_VERSION}_arm64.deb DEBS_LINUX_HEADERS=linux-headers-${DEBS_KERNEL_RELEASE}_${DEBS_KERNEL_VERSION}_arm64.deb DEBS_LINUX_LIBC=linux-libc-dev_${DEBS_KERNEL_VERSION}_arm64.deb DEBS_LINUX_IMAGE_DBG=linux-image-${DEBS_KERNEL_RELEASE}-dbg_${DEBS_KERNEL_VERSION}_arm64.deb if [ ! -e $DEBS_KERNEL_PATH/$DEBS_LINUX_IMAGE ] || [ ! -e $DEBS_KERNEL_PATH/$DEBS_LINUX_HEADERS ];then echo "内核deb包文件有四个:image和headers为必须安装,libc为推荐安装,dbg为可选安装" echo "如果你不想安装内核deb包,请删除 $DEBS_KERNEL_PATH 文件夹" exit fi fi
echo "====卸载dev和proc文件系统" umount $TEMP_ROOTFS/proc umount $TEMP_ROOTFS/sys umount $TEMP_ROOTFS/dev/pts umount $TEMP_ROOTFS/dev umount $TEMP_ROOTFS/mnt echo "====解压ISO文件到临时目录" umount /mnt mount $ISO_SOURCE_PATH/$ISO_SOURCE_NAME /mnt rm -rf $TEMP_ISO mkdir -pv $TEMP_ISO cp -r /mnt/. $TEMP_ISO rm -rf $TEMP_ROOTFS mkdir -pv $TEMP_ROOTFS echo "====解压filesystem.squashfs文件" unsquashfs -f -d $TEMP_ROOTFS /mnt/live/filesystem.squashfs echo "====挂载本机/dev和/proc文件系统到rootfs目录下" mount --bind /proc/ $TEMP_ROOTFS/proc/ mount --bind /sys/ $TEMP_ROOTFS/sys/ mount --bind /dev/ $TEMP_ROOTFS/dev/ mount --bind /dev/pts $TEMP_ROOTFS/dev/pts echo "====安装内核deb包" if [ -n $DEBS_KERNEL_PATH ];then umount $TEMP_ROOTFS/mnt/ mount --bind $DEBS_KERNEL_PATH/ $TEMP_ROOTFS/mnt/
if [ -e $DEBS_KERNEL_PATH/$DEBS_LINUX_IMAGE ];then chroot $TEMP_ROOTFS /bin/sh -c "sudo apt install /mnt/$DEBS_LINUX_IMAGE" fi
if [ -e $DEBS_KERNEL_PATH/$DEBS_LINUX_IMAGE_DBG ];then chroot $TEMP_ROOTFS /bin/sh -c "sudo apt install /mnt/$DEBS_LINUX_IMAGE_DBG" fi
if [ -e $DEBS_KERNEL_PATH/$DEBS_LINUX_HEADERS ];then chroot $TEMP_ROOTFS /bin/sh -c "sudo apt install /mnt/$DEBS_LINUX_HEADERS" fi
if [ -e $DEBS_KERNEL_PATH/$DEBS_LINUX_LIBC ];then chroot $TEMP_ROOTFS /bin/sh -c "sudo apt install /mnt/$DEBS_LINUX_LIBC" fi fi
echo "====安装其它deb包" if [ -d $DEBS_PATH ];then umount $TEMP_ROOTFS/mnt/ mount --bind $DEBS_PATH/ $TEMP_ROOTFS/mnt/ chroot $TEMP_ROOTFS /bin/sh -c "sudo apt install /mnt/*.deb" fi
echo "====制作安装器vmlinuz文件和initrd文件" cp $TEMP_ROOTFS/boot/vmlinuz-$DEBS_KERNEL_RELEASE $TEMP_ISO/live/vmlinuz cp $TEMP_ROOTFS/boot/initrd.img-$DEBS_KERNEL_RELEASE $TEMP_ISO/live/initrd.img
echo "====卸载dev和proc文件系统" umount $TEMP_ROOTFS/proc umount $TEMP_ROOTFS/sys umount $TEMP_ROOTFS/dev/pts umount $TEMP_ROOTFS/dev umount $TEMP_ROOTFS/mnt echo "====将$TEMP_ROOTFS压缩为filesystem.squashfs" rm $TEMP_ISO/live/filesystem.squashfs mksquashfs $TEMP_ROOTFS $TEMP_ISO/live/filesystem.squashfs -comp xz echo "====将rootfs压缩为$TEMP_ISO" xorriso -as mkisofs -r -J -c boot.cat -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot -no-emul-boot -V "uos 20" -file_name_limit 250 -o \ $ISO_DEST_PATH/$ISO_DEST_NAME $TEMP_ISO umount /mnt rm -rf $TEMP_ROOTFS $TEMP_ISO
echo "====定制完成" echo "定制镜像存放于:$ISO_SOURCE_PATH/$ISO_DEST_NAME" exit fi
|