瀏覽代碼

ubuntu and wic

杨振 3 年之前
父節點
當前提交
e538b57eea
共有 3 個文件被更改,包括 90 次插入12 次删除
  1. 二進制
      debootstrap/kylinos/amd64/EFI/BOOT/bootx64.efi
  2. 82 4
      debootstrap/kylinos/rootfs.sh
  3. 8 8
      shell/make_img.sh

二進制
debootstrap/kylinos/amd64/EFI/BOOT/bootx64.efi


+ 82 - 4
debootstrap/kylinos/rootfs.sh

@@ -42,7 +42,7 @@ EXAMPLE:
     $(basename $0) --arch amd64 --name iso --conf config-iso.sh --tasks 'rootfs,config,config_openbox,iso'
 
 标准ubuntu:
-    $(basename $0) --arch amd64 --name ubuntu --mirror http://172.29.157.20/ubuntu --suite focal --conf config-ubuntu.sh --tasks 'rootfs,config,tar,ext4'
+    $(basename $0) --arch amd64 --name ubuntu --mirror http://172.29.157.20/ubuntu --suite focal --conf config-ubuntu.sh --tasks 'rootfs,config,wic'
     "
 
     exit 1
@@ -55,9 +55,9 @@ fi
 
 trap "exit_function" 0
 
-timestamp=$(date "+%Y%m%d")
+# timestamp=$(date "+%Y%m%d")
 # timestamp=$(date "+%Y%m%d%H%M%S")
-# timestamp="20220714"
+timestamp="20220714"
 
 CURRENT_DIR=$(dirname $(readlink -f $0))
 
@@ -273,6 +273,83 @@ EOF
         "."
 }
 
+# 制作磁盘镜像
+function do_wic() {
+    # 磁盘文件名
+    IMAGE_FILE="${ROOTFS_DIR}.wic"
+
+    # 计算rootfs目录大小,默认在原有大小基础上加 600M
+    dusize=$(sudo du -s ${ROOTFS_DIR} | awk '{print $1}')
+    size=$(echo "(${dusize} / 1024) + 600" | bc)
+
+    dd if=/dev/zero of="${IMAGE_FILE}" bs=1M count=${size} status=progress
+
+    # 创建两个分区,一个用来存放kernel、initrd;另一个存放根文件系统
+    sgdisk -n 0:0:+100M -c 0:boot "${IMAGE_FILE}"
+    sgdisk -n 0:0:0 -c 0:rootfs "${IMAGE_FILE}"
+    sgdisk -p "${IMAGE_FILE}"
+
+    disk_path=$(readlink -f "${IMAGE_FILE}")
+    LOOP_DEV=$(losetup -l -O NAME,BACK-FILE | grep "${disk_path}" | awk '{print $1}')
+
+    if [ -z "${LOOP_DEV}" ]; then
+        LOOP_DEV=$(losetup -f)
+        # 将镜像关联到loop设备上
+        sudo losetup -P ${LOOP_DEV} "${IMAGE_FILE}"
+        # sudo partprobe ${LOOP_DEV}
+    fi
+    echo ${LOOP_DEV}
+
+    # 格式化分区
+    yes | sudo mkfs.fat ${LOOP_DEV}p1
+    yes | sudo mkfs.ext4 ${LOOP_DEV}p2
+
+    boot_uuid=$(sudo blkid -s UUID -o value ${LOOP_DEV}p1)
+    root_uuid=$(sudo blkid -s UUID -o value ${LOOP_DEV}p2)
+    part_uuid=$(sudo blkid -s PARTUUID -o value ${LOOP_DEV}p2)
+
+    echo boot_uuid=${boot_uuid}
+    echo root_uuid=${root_uuid}
+    echo part_uuid=${part_uuid}
+
+    # 拷贝文件
+    mkdir -p {p1,p2}
+    sudo mount ${LOOP_DEV}p1 ./p1/
+    sudo mount ${LOOP_DEV}p2 ./p2/
+
+    # copy eif to p1
+    sudo cp -rf ${CURRENT_DIR}/${ARCH}/EFI/ ./p1/
+    # copy rootfs to p2
+    sudo cp -rf -a ${ROOTFS_DIR}/* ./p2/
+
+    # generate grub
+    sudo tee ./p1/EFI/BOOT/grub.cfg <<EOF
+serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
+default=myboot1
+timeout=5
+
+menuentry 'myboot1'{
+linux /vmlinuz root=UUID=${root_uuid} rootwait rootfstype=ext4 console=ttyS0,115200 console=tty0 quiet
+initrd /initrd.img
+}
+
+menuentry 'myboot2'{
+linux /vmlinuz root=PARTUUID=${part_uuid} rootwait rootfstype=ext4 console=ttyS0,115200 console=tty0 quiet
+initrd /initrd.img
+}
+EOF
+
+    # generate fstab
+    sudo mkdir -p ./p2/boot/efi
+    sudo tee ./p2/etc/fstab <<EOF
+UUID=${boot_uuid}   /boot/efi   vfat    rw,relatime 0 0
+UUID=${root_uuid}   /           ext4    rw,relatime 0 1
+EOF
+
+    sudo umount ./p1 ./p2
+    sudo losetup -d ${LOOP_DEV}
+}
+
 function action_umount() {
     if mountpoint -q $1; then
         sudo umount $1
@@ -356,7 +433,8 @@ SUITE=${SUITE:-v101}
 ) | tee ${ROOTFS_ENV_FILE}
 
 LOG_FILE=${ROOTFS_DIR}.log
-echo "running task: '${TASKS}', use 'tail -f ${LOG_FILE}' see detail log"
+# echo "running task: '${TASKS}', use 'tail -f ${LOG_FILE}' see detail log"
+echo "running task: '${TASKS}'"
 
 for task in $(echo ${TASKS} | tr ',' ' '); do
     echo "---> do_${task}"

+ 8 - 8
debootstrap/make_img.sh → shell/make_img.sh

@@ -20,7 +20,7 @@ fi
 ROOTFS_DIR=$1
 
 # 磁盘文件名
-DISK_FILE="system.img"
+IMAGE_FILE="system.img"
 
 # 创建磁盘文件
 function create_disk() {
@@ -28,29 +28,29 @@ function create_disk() {
     dusize=$(sudo du -s ${ROOTFS_DIR} | awk '{print $1}')
     size=$(echo "(${dusize} / 1024) + 600" | bc)
 
-    dd if=/dev/zero of="${DISK_FILE}" bs=1M count=${size} status=progress
+    dd if=/dev/zero of="${IMAGE_FILE}" bs=1M count=2048 status=progress
 }
 
 # 创建两个分区,一个用来存放kernel、initrd;另一个存放根文件系统
 function create_partition() {
-    sgdisk -n 0:0:+100M -c 0:boot "${DISK_FILE}"
-    sgdisk -n 0:0:0 -c 0:rootfs "${DISK_FILE}"
+    sgdisk -n 0:0:+100M -c 0:boot "${IMAGE_FILE}"
+    sgdisk -n 0:0:0 -c 0:rootfs "${IMAGE_FILE}"
 }
 
 # 查看分区
 function list_partition() {
-    sgdisk -p "${DISK_FILE}"
+    sgdisk -p "${IMAGE_FILE}"
 }
 
 # 寻找一个空闲的loop设备,并关联磁盘镜像文件
 function find_loop_and_setup() {
-    disk_path=$(readlink -f "${DISK_FILE}")
+    disk_path=$(readlink -f "${IMAGE_FILE}")
     LOOP_DEV=$(losetup -l -O NAME,BACK-FILE | grep "${disk_path}" | awk '{print $1}')
 
     if [ -z "${LOOP_DEV}" ]; then
         LOOP_DEV=$(losetup -f)
         # 将镜像关联到loop设备上
-        sudo losetup ${LOOP_DEV} "${DISK_FILE}"
+        sudo losetup ${LOOP_DEV} "${IMAGE_FILE}"
         sudo partprobe ${LOOP_DEV}
     fi
     echo ${LOOP_DEV}
@@ -99,7 +99,7 @@ function gen_grub() {
     sudo tee ./p1/EFI/BOOT/grub.cfg <<EOF
 serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
 default=myboot
-timeout=5                                                                                                                                     
+timeout=5
 
 menuentry 'myboot'{
 linux /vmlinuz root=UUID=${root_uuid} rootwait rootfstype=ext4 console=ttyS0,115200 console=tty0 quiet