05-mkbootimage.sh (2058B)
1 #!/bin/sh 2 3 if [ ! -e ./lib/env.sh ] || [ ! -e ./lib/fun.sh ]; then 4 printf "Nonexistant lib/env.sh or lib/fun.sh!\n" >&2 5 exit 1 6 fi 7 8 . ./lib/env.sh 9 . ./lib/fun.sh 10 11 # Max threads for xz (compression) 12 # To use max recommended value, uncomment next line and comment the one after: 13 #T=$(echo $JN | sed 's,[^0-9]*\([0-9]\+\)[^0-9]*,\1,g') 14 T=2 15 16 if [ "$(id -u)" -ne 0 ]; then 17 msg err "You must run this script as root" 18 exit 1 19 fi 20 21 ( 22 ver=${G_VER} 23 arch=x86_64 24 timestamp=$(date +'%Y%m%d') 25 diskimg=galeb-${ver}-${arch}-${timestamp}.raw 26 27 rm "${diskimg}" 28 29 truncate -s $(echo '(35 * 1024 * 1024 * 1024)/10' | bc) "${diskimg}" || exit 1 30 31 printf "g\nn\n\n\n+500M\nt\n1\nn\n\n\n\nx\nn\n1\nGALBOOT\n"\ 32 "n\n2\nGalRoot\nr\nw\n" | fdisk "${diskimg}" || exit 1 33 34 losetup -P -f "${diskimg}" || exit 1 35 36 mkfs.ext4 -L GalRoot /dev/loop0p2 || exit 1 37 mkfs.vfat -F 32 -n GALBOOT /dev/loop0p1 || exit 1 38 39 mount -t ext4 /dev/loop0p2 /mnt || exit 1 40 mkdir -p /mnt/boot || exit 1 41 mount -t vfat /dev/loop0p1 /mnt/boot || exit 1 42 43 BPUUID=$(lsblk -no PARTUUID /dev/loop0p1) 44 RPUUID=$(lsblk -no PARTUUID /dev/loop0p2) 45 46 msg info "Generating %s" "${GR}/etc/fstab" 47 cat <<! >${GR}/etc/fstab 48 PARTUUID=${RPUUID} / ext4 rw,relatime 0 1 49 PARTUUID=${BPUUID} /boot vfat rw,relatime,fmask=0133,dmask=0022,errors=remount-ro 0 2 50 ! 51 52 msg info "Generating %s" "${GR}/boot/EFI/GALEB/BOOT.CSV" 53 cat <<! >${GR}/boot/EFI/GALEB/BOOT-ASC.CSV 54 vmlinuz,Galeb USB,initrd=\initramfs.img root=PARTUUID=${RPUUID} rw rootdelay=5,Boot entry for Galeb USB 55 ! 56 57 iconv -f ASCII -t UCS-2LE <${GR}/boot/EFI/GALEB/BOOT-ASC.CSV \ 58 >${GR}/boot/EFI/GALEB/BOOT.CSV 59 60 msg info "Copying files" 61 rsync -arv --numeric-ids \ 62 --exclude='/cross-tools' \ 63 --exclude='/src/*' \ 64 --exclude='/tools' \ 65 --exclude='/var/log/galeb' \ 66 ${GR}/* /mnt/ || exit 1 67 68 msg info "Umounting /mnt" 69 umount /mnt/boot || exit 1 70 umount /mnt || exit 1 71 72 e2fsck -p /dev/loop0p2 || exit 1 73 fsck.fat -p /dev/loop0p1 || exit 1 74 75 losetup -d /dev/loop0 || exit 1 76 xz -T$T -9vvf "${diskimg}" || exit 1 77 chown ${GUSER}:${GUSER} "${diskimg}".xz 78 ) || msg err "Image generation failed"