Jump to content











Photo
- - - - -

Grub4dos avec windows pour démarrer un mac os x avec un iso et dmg ou vhd


  • Please log in to reply
3 replies to this topic

#1 deek5

deek5

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 15 March 2018 - 11:06 PM

bonjour, petit memo pour mon utilisation de Grub4Dos pour lancer chameleon ou lancer chameleon et un Mac Os X système relier à un fichier DMG à partir du boot de Windows . Dans l'absolu cela doit mettre en application 7 manœuvres pour arriver au résultat, mais en automatisant un peu cela ce fait avec 3 manipulations .

Le but, c'est d'avoir la possibilité au démarrage de Windows de démarrer un système Mac os x, je l'utilise pour vérifier que mes sauvegardes de mac os x en dmg ou vhd soient fonctionnelles et sans erreurs

J'utilise visual BCD pour créer un choix d'ouverture de /Grub4/grub.exe dans la BCD de windows (BCD magasin de démarrage Windows).



Tout d'abord avoir un système ou un fichier DMG d'une installation Mac Os X existant. Après d'avoir au moins une partition HFS.

Il faut créer un Iso ou un Vhd, monté sous mac os cet iso ou ce vhd ou ce DMG, installer   chameleon avec un dossier Extra, dans ce dossier on va placer le kernel (mach_kernel ou  kernel) du système désiré, le kernelcache du même système , le boot.plist (org.chameleon.Boot.plist) contenant les options pour votre démarrage avec en plus l'option kernel pour le fichier du noyau, l'option kernelcache pour le cache à utiliser, l'option Kernel Flags -v -s rd=uuid boot-uuid=(l'uuid de la partition hfs contenant le DMG ou Vhd à monter), rp=file:///MacLion.dmg (le fichier DMG du système à monter qui se trouve sur la partition hfs dont on a donné l'UUID ), exemple d'un Kernel Flags

Kernel Flags  String    PciRootUID=0 rd=uuid boot-uuid=B61C6FED-DB6F-3B84-8D39-E933A2DF1312   rp=file:///MacLion.dmg -v -s  npci=0x2000

    <key>Kernel Flags</key>
    <string>PciRootUID=0 rd=uuid boot-uuid=B61C6FED-DB6F-3B84-8D39-E933A2DF1312   rp=file:///MacLion.dmg -v -s  npci=0x2000</string> .

pour créer un iso sous Mac Os X montable par Grub4Dos, on créer un dossier ou un dmg ( de préférence un dmg  read and write) où on installe chameleon ( si c'est un dossier on copie dans ce dossier le dossier Extra, le dossier usr, le fichier boot)  on utilise hdiutil dans le terminal

avec les options suivante pour un dmg créer qui porte le nom "base.dmg" et qui est monté

sudo hdiutil makehybrid -o /base.iso /Volumes/base -iso -hfs -joliet -eltorito-boot /Volumes/base/usr/standalone/i386/cdboot -no-emul-boot -hfs-volume-name "baseiso" -joliet-volume-name "baseiso" -iso-volume-name "baseiso"

la commande créera un fichier base.iso à la racine (/base.iso), ce fichier sera créer à partir du base.dmg monté ( /Volumes/base )


avec les option suivante pour un dossier (ce dossier est sur le bureau) contenant chameleon et les dossiers (Extra,usr)

sudo hdiutil makehybrid -o /base.iso ~/Desktop/base -iso -hfs -joliet -eltorito-boot ~/Desktop/base/usr/standalone/i386/cdboot -no-emul-boot -hfs-volume-name "baseiso" -joliet-volume-name "baseiso" -iso-volume-name "baseiso"

la commande créera un fichier base.iso à la racine (/base.iso), ce fichier sera créer à partir du dossier ~/Desktop/base le ~ remplace "/Users/yourname" ( ~/Desktop/base)
 

Une fois l'iso créer, vous le copiez sur une partition windows (ntfs).

Dans le menu.lst de grub4dos (pour Yosemite par example)

"find --set-root --ignore-floppies --ignore-cd /yos.vhd
map /yos.vhd (hd4,0)
map --hook
map --harddrives=4
rootnoverify (hd4,0)
chainloader (hd4,0)+1
boot"

ou pour un iso d'Elcapitan

"title Elcapitan
find --set-root --ignore-floppies --ignore-cd /elcap.iso
map --mem /elcap.iso (hd32)
map --hook
rootnoverify (hd32)
chainloader (hd32)
boot"

Après grub4dos, votre nouveau "bootloader" "chameleon ou Enoch " s'affiche, dans le choix de démarrage vous voyez apparaitre votre iso ou vhd , vous le sélectionnez, le boot du mac os x se réalise après montage du dmg ou vhd jusqu'à l'entée en ligne de commande du système mac os x (option -s du kernel flags), j'utilise une version modifiée de  /private/etc/rc.netboot qui est présent sur tous les mac os x. Donc une fois en ligne de commande à la racine, vous tapez au clavier "/private/etc/rc.netboot" et puis "/exit" pour poursuivre le démarrage de votre mac os x.

vous devez téléchargé une version de Grub4Dos (version 0.4.6a) et l'installer à partir de Windows (pour rappel tout cela est possible si est seulement si vous avez déjà un système mac os x existant, des moyens pour lire,écrire et créer des partitions (volumes) HFS+, NTFS (ex : Paragon NTFS pour Mac et Paragon HFS pour windows).

Tout ce qui est écrit ci-dessus est issu de la traduction google, je m'excuse si c'est mal traduit.

Peut être pensez vous que tout ceci n'est pas très utile, je le conçois très bien, à la base je souhaitais pouvoir démarrer à partir de windows, il s'est avéré que apple ne traite pas la virtualisation directement pour ses système d'exploitation (contrairement à window qui depuis windows 7 permet utiliser des vhd comme système d'exploitation)
 



#2 deek5

deek5

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 20 March 2018 - 09:35 PM

Pour créer des vhd montable pas Grub4Dos, utilisez la fonction élémentaire du gestionnaire de disk de Windows 7.



#3 deek5

deek5

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 22 March 2018 - 09:02 PM

Pour démarrer un système mac os x à partir d'un iso , le plus simple c'est d'utiliser easybcd sous windows plutôt que grub4dos. Easybcd peut créer dans la bcd le choix de démarrer un système à partir d'un iso . Pour créer un iso le plus facile  , comme il est écrit ci-dessus, c'est d'utiliser les commandes du terminal sous mac. Créer un dossier contenant le dossier Extra ( incontournable pour bootloader avec chaméléon (ou Enoch d'Ermac)) un dossier System (pratiquement vide juste contenant un fichier SystemVersion.plist (qui est vérifié par chaméléon au démarrage (l'arborescence  /System/Library/CoreServices/SystemVersion.plist , un dossier System à l'intérieur un dossier Library,à l'intérieur un dossier CoreServices et à l'intérieur le fichier  SystemVersion.plist) , un dossier usr contenant le dossier standalone (dossier créer par chaméléon ou Enoch , quand vous installez celui-ci sur une partition, pour rappel chaméléon est un bootloader de système mac os x sur un hackintosh) ( arborescence  /usr/standalone) je cite /usr/standalone, parce que dans la commande j'utilise cdboot qui se trouve ici /usr/standalone/i386/cdboot, cdboot pour rendre démarrable ou amorçable l'iso.

Revenons au dossier /Extra , il doit contenir le fichier "org.chameleon.Boot.plist" qui contient toutes les options pour chaméléon et option pour démarrage du système , peut être un dossier /Extra/Extentions , pour des extensions du kernel qui ne peuvent pas se trouver dans le cache (ex: FakeSMC.kext pour macos x High Sierra, donc tous les kexts qui ne peuvent pas être dans le cache ), un fichier smbios.plist qui contient la description de votre mac (imac, mini, macbook,MacPro ) (ex :   

 

 <key>SMbiosdate</key>
    <string>03/09/13</string>
    <key>SMbiosvendor</key>
    <string>Apple Inc.</string>
    <key>SMbiosversion</key>
    <string>IM142.88Z.0118.B00.1309031249</string>
    <key>SMboardproduct</key>
    <string>Mac-27ADBB7B4CEE8E61</string>
    <key>SMexternalclock</key>
    <string>100 MHz</string>
    <key>SMfamily</key>
    <string>iMac</string>)

 

vous pouvez trouver des fichiers smbios.plist sur le net sans difficulté. Dans le dossier Extra ce trouve aussi le fichier kernel du système que vous voulez démarrer , à l'origine le fichier kernel depuis Yosemite se trouve "/System/Library/Kernels/kernel" une fois copié dans le dossier Extra vous pouvez le nommez comme bon vous semble (ex : "macHSker"), il faut surtout avoir la clé dans org.chameleon.Boot.plist     

<key>Kernel </key>
    <string>/Extra/macHSker</string>,

 

le fichier cache qui selon les systèmes de Lion jusqu'à El Capitan se trouvait dans le dossier /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache, et depuis El Capitan dans /System/Library/PrelinkedKernels/prelinkedkernel , le kernelcache (ou prelinkedkernel )c'est l'assemblage du kernel et des kernel extensions (kext) c'est ce fichier qui permet de bipasser le chargement de tous les kexts et du kernel au démarrage, une fois le fichier copié dans le dossier /Extra vous pouvez le renommer comme bon vous semble (ex: macHSCach) sans oublier la clé dans org.chameleon.Boot.plist

 

<key>Kernel Cache</key>
    <string>/Extra/macHSCach</string>.  et pour finir la clé dans     org.chameleon.Boot.plist <key>Kernel Flags</key>
    <string>PciRootUID=0 GraphicsEnabler=yes kext-dev-mode=1 -v -s npci=0x2000 nvda_drv=1 rd=uuid boot-uuid=B61C6FED-DB6F-3B84-8D39-E933A2DF1312 rp=file:///MacHS.vhd  rootless=0</string>
 qui vous permettra d'aller chercher votre vhd et de le charger ou si vous souhaitez démarrer votre partition contenant votre système mac os x juste utiliser l'uuid de la partition .

<key>Kernel Flags</key>
    <string>PciRootUID=0 GraphicsEnabler=yes kext-dev-mode=1 -v -s npci=0x2000 nvda_drv=1 rd=uuid boot-uuid=399520ED-E5A2-3CD7-94DA-C94AE68692EB rootless=0</string>

, l'uuid présente , c'est soit l'uuid de la partition HFS contenant le fichier vhd ou dmg  ou bien l'uuid de votre partition système mac os x (Yosemite,El Capitan,Sierra,High Sierra, etc …), le fichier boot sera aussi copié dans le dossier , le fichier boot est de chaméléon ou Enoch. Donc au final dans le dossier que vous allez convertir en fichier iso et copié à la racine de votre partition Windows, l'arborescence de ce dossier sera par exemple

/MacHS
/Extra/
/System/
/usr/
/boot

L'iso sera réalisé avec la commande ci-dessous dans le Terminal du système mac os x

sudo hdiutil makehybrid -o /hsiso.iso /Volumes/disk0s3/MacHS -iso -hfs -joliet -eltorito-boot /Volumes/disk0s3/MacHS/usr/standalone/i386/cdboot -no-emul-boot -hfs-volume-name "MacHS" -joliet-volume-name "MacHS" -iso-volume-name "MacHS"



#4 deek5

deek5

    Newbie

  • Members
  • 14 posts
  •  
    France

Posted 10 April 2018 - 01:21 PM

Une fois votre imagedisk "VHD" ou "DMG" ,montée par le système, elle sera en lecture seule  (même si à l'origine elle est "Read & Write" ) c'est un choix incontournable d'Apple .

Donc pour se substituer  à cette situation, après être arrivé à la ligne de commande suite à l'exécution de l'option " -s" du kernel fkags de org.chameleon.Boot.plist on peut utiliser " sh /private/etc/rc.netboot init" directement puis exit pour sortir de la ligne de commande et poursuivre le démarrage. /private/etc/rc.netboot doit être modifier , pour le modifier recopiiez-le sur votre bureau ,il sera déverrouillé,  ci-dessous la version originale des lignes 24,25,26 du script " /private/etc/rc.netboot"

"NETBOOT_MOUNT=/var/netboot
NETBOOT_SHADOW=${NETBOOT_SHADOW:-NETWORK-}
LOCAL_NETBOOT_DIR=private/var/run/com.apple.NetBootX"

Pour créer un shadow file il vous faut modifier la ligne 25 comme ceci "NETBOOT_SHADOW=${NETBOOT_SHADOW:-LOCAL_ONLY-}" ci-dessous les mêmes lignes modifiées

NETBOOT_MOUNT=/var/netboot
NETBOOT_SHADOW=${NETBOOT_SHADOW:-LOCAL-}
LOCAL_NETBOOT_DIR=private/var/run/com.apple.NetBootX

rc.netboot crée un ramdisk où seront détournés tous les accés disk en écriture étant donné que votre imagedisk est en lecture seule.

rattache le ramdisk à votre image disque racine


une fois modifié rc.netboot vous pouvez le recopier vers  /private/etc/.

quand vous êtes en ligne de commande taper au clavier "sh /private/etc/rc.netboot init" , si vous rencontrez un problème de "permission denied" recopiez rc.netboot à la racine de votre imagedisk, en ligne de commande taper au clavier "sh /rc.netboot init" puis exit
Pour rendre le script exécutable  dans le terminal "sudo chmod +x /private/etc/rc.netboot" . Toutes ces modifications doivent modifier rc.netboot qui se trouve sur votre imagedisk. Si vous le faite sur votre disk utilisé encourt , recopiez rc.netboot vers votre imagedisk.

j'utilise un rc.netboot modifié par spartango 2008 rc.liveboot
que j'ai moi même réduit en taille , il crée un ramdisk de 2go, ci dessous le script de /rc.b que j'utilise
à recopier si vous le souhaitez . Pour l'utilisez au clavier vous taper "/rc.b" et exit attendez bien la fin de l'exécution de "/rc.b"  la dernière phrase qui doit s'écrire à l'écran c'est "set  ComputerName  VHD" il créer donc un ramdisk de 2go

"
#!/bin/sh -x
##
# Copyright 2002 Apple Computer, Inc.
#
# This script configures LiveDVD, derived from Netboot
# Modded by spartango 2008
# still has remanents of netboot
##

. /etc/rc.common

#
# Define: NETBOOT_SHADOW
# Purpose:
#   To change the behavior of the system when choosing a netboot shadow
#   to use.
# Values:
#   -NETWORK-        Try to use the network for the shadow file, if
#            that fails, use the local drive
#   -NETWORK_ONLY-    Only use the network, fail if not available
#   -LOCAL-        Use the local drive for the shadow file, if that
#            fails, use the network
#   -LOCAL_ONLY-    Only use the local drive for the shadow, fail if
#            not available

NETBOOT_MOUNT=/var/netboot
NETBOOT_SHADOW=${NETBOOT_SHADOW:-LOCAL-}

Failed()
{
    echo rc.netboot: $1
    exit 1
}

common_start()
{
    netboot_dir=$1
    netboot_shadow=$2
    if [ "${netboot_dir}" = "" ] ; then
    Failed "netboot_dir is empty"
    fi
    if [ "${netboot_shadow}" = "" ] ; then
    Failed "netboot_shadow is empty"
    fi
    netboot_shadow="${netboot_dir}/${netboot_shadow}"
    if ! mkdir -p "${netboot_dir}" ; then
    Failed "create ${netboot_dir} failed"
    fi
    chmod 700 "${netboot_dir}"
    mount -u -o ro /
    root_device=$(mount | sed -n 's:/dev/\(.*\) on / .*:\1:p')
    case "${root_device}" in
    vn*)
        if ! touch "${netboot_shadow}" ; then
        Failed "create ${netboot_shadow} failed"
        fi
        chmod 600 "${netboot_shadow}"
            if ! /usr/libexec/vndevice shadow "/dev/r${root_device}" "${netboot_shadow}" ; then
        Failed "vndevice shadow failed"
        fi
        ;;
    "")
        Failed "root device unknown"
        ;;
    *)
        if ! touch "${netboot_shadow}" ; then
        Failed "failed to create shadow ${netboot_shadow}"
        fi
        chmod 600 "${netboot_shadow}"
        if ! /usr/bin/nbdst -recycle "${root_device}" "${netboot_shadow}" ; then
        Failed "nbdst failed"    
        fi
        ;;
    esac
}

local_mount()
{
    volinfo=`autodiskmount -F 2>/dev/null`
RAMDisk "${NETBOOT_MOUNT}"
common_start "${NETBOOT_MOUNT}/.com.apple.NetBootX" shadowfile
    return 0
}


do_start()
{
    
        err=$(local_mount)
        if [ $? -ne 0 ]; then
            Failed "${err}"
        fi
}

RAMDisk()
{
  mntpt=$1
  #rdsize=$2
  echo "Creation RAM Disk pour $mntpt"
  dev=`hdik -drivekey system-image=yes -drivekey eject-upon-logout=no -nomount ram://2000000`
  if [ $? -eq 0 ] ; then
    #newfs $dev #hack to init partition table automatically
    /sbin/newfs_hfs $dev
    mount -t hfs -o nosuid,nodev $dev $mntpt
    echo "ramdisk créé et monté OK"
  fi
}
#Example: RAMDisk /Volumes 1024

do_init()
{
                                     

# attach the shadow file to the root disk image
    do_start

    # make sure the root filesystem is clean
    fsck -p || fsck -fy || Failed "Could not clean root filesystem"

    # make it writable
    mount -uw /

    # adjust /private/var/vm to point to the writable area (if not diskless)
    swapdir=/private/var/vm
    mounted_from=$(mount | sed -n 's:\(.*\) on .*/var/netboot.*:\1:p')
    case "${mounted_from}" in
    /dev/*)
        netboot_dir="${NETBOOT_MOUNT}/.com.apple.NetBootX"
        if [ -d "${netboot_dir}" ]; then
            rm -rf "${swapdir}"
            ln -s "${netboot_dir}" "${swapdir}"
            echo "Montage par ramdisk miroir !"
        fi
        ;;
    *)
    ;;
    esac

    # set the ComputerName
    echo " set  ComputerName  VHD "
    scutil --set ComputerName VHD
}

do_init

exit 0

"
 






1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users