X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/0f8478fbe1ecbcfd7a1f189d1ca2a60d05cdf322..bd8aebf166bd9a7a5f2fc0f54baf2aff3bea74cd:/IMG/cpio/ventoy/hook/vine/udev_disk_hook.sh diff --git a/IMG/cpio/ventoy/hook/vine/udev_disk_hook.sh b/IMG/cpio/ventoy/hook/vine/udev_disk_hook.sh index 8209095..1ea6d67 100644 --- a/IMG/cpio/ventoy/hook/vine/udev_disk_hook.sh +++ b/IMG/cpio/ventoy/hook/vine/udev_disk_hook.sh @@ -19,10 +19,27 @@ . /ventoy/hook/ventoy-hook-lib.sh -vtCheatLoop=loop6 +ventoy_os_install_dmsetup_by_ko() { + vtlog "ventoy_os_install_dmsetup_by_ko $1" + + vtVer=$($BUSYBOX_PATH/uname -r) + if $BUSYBOX_PATH/uname -m | $GREP -q 64; then + vtBit=64 + else + vtBit=32 + fi + + ventoy_extract_vtloopex $1 vine + vtLoopExDir=$VTOY_PATH/vtloopex/vine/vtloopex + + if [ -e $vtLoopExDir/dm-mod/$vtVer/$vtBit/dm-mod.ko.xz ]; then + $BUSYBOX_PATH/xz -d $vtLoopExDir/dm-mod/$vtVer/$vtBit/dm-mod.ko.xz + insmod $vtLoopExDir/dm-mod/$vtVer/$vtBit/dm-mod.ko + fi +} -ventoy_os_install_dmsetup() { - vtlog "ventoy_os_install_dmsetup $1" +ventoy_os_install_dmsetup_by_rpm() { + vtlog "ventoy_os_install_dmsetup_by_rpm $1" vt_usb_disk=$1 @@ -32,48 +49,47 @@ ventoy_os_install_dmsetup() { # install dmsetup LINE=$($GREP 'kernel-[0-9].*\.rpm' $VTOY_PATH/iso_file_list) if [ $? -eq 0 ]; then - install_rpm_from_line "$LINE" ${vt_usb_disk} + extract_rpm_from_line "$LINE" ${vt_usb_disk} fi - $BUSYBOX_PATH/modprobe dm-mod + vtKoName=$($BUSYBOX_PATH/find $VTOY_PATH/rpm/ -name dm-mod.ko*) + vtlog "vtKoName=$vtKoName" - vtlog "dmsetup install finish, now check it..." + insmod $vtKoName - dmsetup_path=/ventoy/tool/dmsetup - if [ -z "$dmsetup_path" ]; then - vterr "dmsetup still not found after install" - elif $dmsetup_path info >> $VTLOG 2>&1; then - vtlog "$dmsetup_path work ok" - else - vterr "$dmsetup_path not work" - fi + $BUSYBOX_PATH/rm -rf $VTOY_PATH/rpm/ } - -if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then - # /dev/vtCheatLoop come first - if [ "$1" = "$vtCheatLoop" ] && [ -b $VTOY_DM_PATH ]; then - ventoy_copy_device_mapper /dev/$vtCheatLoop - fi +if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then exit 0 fi -ventoy_os_install_dmsetup "/dev/${1:0:-1}" +ventoy_os_install_dmsetup_by_ko "/dev/$1" +if $GREP -q 'device.mapper' /proc/devices; then + vtlog "device-mapper module install OK" +else + ventoy_os_install_dmsetup_by_rpm "/dev/${1:0:-1}" +fi + +ventoy_udev_disk_common_hook $* -ventoy_udev_disk_common_hook $* "noreplace" +blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/') +blkdev_num_dev=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/') +vtDM=$(ventoy_find_dm_id ${blkdev_num}) -$BUSYBOX_PATH/mount $VTOY_DM_PATH /mnt/ventoy +[ -b /dev/$vtDM ] || $BUSYBOX_PATH/mknod -m 0660 /dev/$vtDM b $blkdev_num_dev +$BUSYBOX_PATH/rm -rf /dev/mapper -# -# We do a trick for rhel6 series here. -# Use /dev/$vtCheatLoop and wapper it as a removable cdrom with bind mount. -# Then the anaconda installer will accept /dev/$vtCheatLoop as the install medium. -# -ventoy_copy_device_mapper /dev/$vtCheatLoop +#Create a fake IDE-CDROM driver can't be ide-scsi /proc has been patched to /vtoy +$BUSYBOX_PATH/mkdir -p /vtoy +$BUSYBOX_PATH/cp -a /proc/ide /vtoy/ +$BUSYBOX_PATH/mkdir -p /vtoy/ide/aztcd + +echo 'ide' > /vtoy/ide/aztcd/driver +echo 'cdrom' > /vtoy/ide/aztcd/media -$BUSYBOX_PATH/cp -a /sys/devices/virtual/block/$vtCheatLoop /tmp/ >> $VTLOG 2>&1 -echo 19 > /tmp/$vtCheatLoop/capability -$BUSYBOX_PATH/mount --bind /tmp/$vtCheatLoop /sys/block/$vtCheatLoop >> $VTLOG 2>&1 # OK finish set_ventoy_hook_finish + +exit 0