10 votes

Comment puis-je créer un disque de démarrage pour ArchLInux sous MacOS ?

J'essaie de trouver comment faire l'équivalent de ces instructions pour créer un disque bootable archlinux sur un Mac. (J'utilise un adaptateur Micro SD à USB.) J'ai trouvé ces instructions sur le partitionnement d'une clé USB Mais je ne sais pas comment les appliquer, car les instructions que j'essaie de "traduire" en termes de MacOS parlent de secteurs, et c'est un niveau très inférieur à celui dans lequel j'ai l'habitude de travailler. Pour être tout à fait clair, ma question est la suivante : comment puis-je réaliser les mêmes choses que dans les instructions en utilisant MacOS 10.12.6 ? Merci !

9voto

David Anderson Points 30783

Il n'y a pas de commande dans MacOS pour formater une partition afin d'utiliser un système de fichiers linux. En d'autres termes, il n'existe pas d'équivalent pour la commande Arch Linux mkfs.ext4 commande. Il existe de nombreuses solutions possibles à ce problème. Vous trouverez ci-dessous une de ces solutions.

Je propose que la meilleure façon d'accomplir la création d'un disque amorçable soit de démarrer le système d'exploitation Arch Linux sur votre Mac. Cela vous permettra d'utiliser les commandes montrées dans la section lien internet que vous avez fourni. Ce démarrage d'Arch Linux se fera à partir d'une clé USB de 1 Go ou plus. L'avantage d'utiliser une clé USB est que vous n'aurez pas à installer Arch Linux sur un de vos disques internes.

Approche manuelle de la création d'une clé USB Arch Linux amorçable sur Mac

Remarque : Vous pouvez copier et coller chaque commande ci-dessous dans la fenêtre de l'application Terminal. Vous réduirez ainsi le nombre de frappes et le risque d'erreurs de frappe.

  1. Télécharger un .iso fichier. Le fichier compatible Mac que j'ai choisi de télécharger s'appelle archlinux-2017.12.01-x86_64.iso . Vous pouvez trouver ce fichier à l'adresse suivante Site web d'Arch Linux . Ce fichier a été téléchargé dans mon dossier "Téléchargements". Je suppose que vous ferez de même.

  2. Ouvrez une fenêtre de l'application Terminal. Entrez la commande suivante pour naviguer dans votre dossier "Downloads".

    cd  ~/Downloads
  3. Convertir ceci .iso dans un format compatible avec les lecteurs flash. T

    hdiutil  convert  archlinux-2017.12.01-x86_64.iso  -format  UDRW  -o  target.img
  4. En .dmg peuvent être ajoutés au nom du fichier de sortie. Entrez la commande suivante pour vérifier si cela s'est produit.

    ls  target.img.dmg

    Si le fichier nommé target.img.dmg apparaît, puis entrez la commande suivante pour renommer ce fichier.

    mv  -f  target.img.dmg  target.img
  5. Entrez la commande ci-dessous pour obtenir un avant liste des lecteurs.

    ls  /dev  |  egrep  ^disk\\d+$
  6. Insérez votre clé USB.

  7. Entrez à nouveau la commande ci-dessous pour obtenir un après liste des lecteurs. Ensuite, déterminez l'identifiant attribué à votre clé USB (par exemple, l'identifiant qui n'est pas apparu à l'étape 5).

    ls  /dev  |  egrep  ^disk\\d+$

    Remarque : Dans les étapes suivantes, remplacez diskN avec l'identifiant attribué à la clé USB.

  8. Entrez la commande ci-dessous pour démonter le lecteur flash.

    diskutil  unmountdisk  diskN

    Note : Si vous voyez l'erreur Unmount of diskN failed: at least one volume could not be unmounted Ouvrez l'application Utilitaire de disque et démontez le ou les volumes (ne les éjectez pas).

  9. Entrez la commande ci-dessous pour copier target.img sur votre clé USB.

    sudo  dd  if=target.img  bs=1m  of=/dev/diskN

    Notez ce qui suit :

    • Cette commande vous demandera d'entrer votre mot de passe de connexion.
    • Pour visualiser la progression de l'opération de copie, appuyez sur le bouton control + T pendant que la commande est en cours d'exécution.
    • Utilisation de /dev/rdisk au lieu de /dev/disk peut être plus rapide.
    • Si vous voyez l'erreur dd: Invalid number '1m' vous utilisez le programme GNU dd commandement. Utilisez la même commande mais remplacez bs=1m avec bs=1M .
    • Si vous voyez l'erreur dd: /dev/diskN: Resource busy Assurez-vous que le lecteur n'est pas utilisé. Ouvrez l'application Utilitaire de disque et démontez le ou les volumes (ne les éjectez pas).
  10. Lorsque la commande 'dd' est terminée, vous recevez le message suivant. Vous devez sélectionner "Ignorer".

    e1

    Note : Le disque (lecteur flash) est lisible par votre ordinateur. Le message aurait dû dire : "Le disque que vous avez inséré n'était pas lisible par MacOS".

    Pour passer à la partie suivante de cette procédure, vous devrez laisser le lecteur flash branché. Si vous devez éjecter la clé USB, vous pouvez utiliser l'application Utilitaire de disque ou entrer la commande ci-dessous.

    diskutil  eject  /dev/diskN

Initialisation de la carte Micro SD

Les instructions, vous avez fait référence Si la carte micro SD n'est pas initialisée ou si elle a été initialisée en MBR sans partitions, il faut supposer que la carte micro SD n'est pas initialisée. Vous pouvez effectuer les étapes suivantes pour vous assurer que votre carte micro SD est correctement initialisée.

  1. Entrez la commande ci-dessous pour obtenir un avant liste des lecteurs.

    ls  /dev  |  egrep  ^disk\\d+$
  2. À l'aide de l'adaptateur, branchez la carte micro SD sur le Mac.

  3. Entrez à nouveau la commande ci-dessous pour obtenir un après liste des lecteurs. Ensuite, déterminez l'identifiant attribué à votre carte micro SD (par exemple, l'identifiant qui n'est pas apparu à l'étape 1).

    ls   /dev  |  egrep  ^disk\\d+$

    Remarque : Dans les étapes suivantes, remplacez diskN avec l'identifiant attribué à la carte micro SD.

  4. Entrez la commande suivante pour initialiser la carte micro SD.

    diskutil  partitiondisk  diskN  1  mbr  free  none  r
  5. Entrez la commande ci-dessous pour démonter la carte micro SD.

    diskutil  eject  diskN

Démarrer votre Mac sur Arch Linux

  1. Si la clé USB Mac bootable Arch Linux n'est pas branchée, faites-le maintenant.
  2. Redémarrez votre Mac et maintenez immédiatement enfoncée la touche option jusqu'à ce que le gestionnaire de démarrage apparaisse.
  3. Sélectionnez l'icône intitulée "EFI Boot", puis sélectionnez la flèche sous l'étiquette.
  4. Sélectionnez "Arch Linux archiso x86_64 UEFI CD" ou attendez que cela se fasse automatiquement.

Remarque sur les identificateurs de lecteur

Le matériel utilisé par les machines exécutant les systèmes d'exploitation Linux, Unix, MacOS et l'ancien OS X reçoit des identifiants de périphérique sous forme de chaîne de caractères. Dans le contexte de votre question, nous ne traitons que des périphériques qui sont des lecteurs. Le système d'exploitation MacOS utilise diskN pour identifier les disques durs, les disques SSD, les cartes SD, les cartes micro SD, les clés USB, etc. La valeur N est un nombre entier supérieur à zéro. Le système d'exploitation Arch Linux utilise un schéma différent. Ici, la forme de l'identifiant du lecteur est sdXX est une lettre minuscule de l'alphabet anglais.

Création de cartes Micro SD

Note : Puisque vous démarrez sur une version "Live" d'Arch Linux, j'ai fait quelques changements dans la procédure. vous avez fait référence .

  1. Insérez une carte micro SD dans votre ordinateur et enregistrez l'identifiant de l'appareil ( dmesg | tail )

  2. Assurez-vous qu'il n'est pas monté ( umount /dev/sdX* o umount /dev/mmcblk* )

  3. Début fdisk pour partitionner la carte SD :

    fdisk  /dev/sdX
  4. Au fdisk créez les nouvelles partitions :

    a. Type n alors p pour le primaire, 1 pour la première partition du disque, le return pour accepter les secteurs de départ par défaut, et +100M pour le secteur de la fin.

    b. Type t pour définir le type, puis c pour le régler sur FAT.

    c. Type n alors p pour le primaire, 2 pour la deuxième partition, et appuyez sur le bouton return pour accepter les valeurs par défaut.

    d. Quittez en tapant w .

  5. Créer et monter le système de fichiers vfat :

    mkfs.vfat  /dev/sdX1
    mkdir  boot
    mount  /dev/sdX1 boot
  6. Créer et monter le système de fichiers ext4 :

    mkfs.ext4  /dev/sdX2
    mkdir  root
    mount  /dev/sdX2 root
  7. Téléchargez et extrayez le système de fichiers racine :

    cd  ~/root
    wget  http://os.archlinuxarm.org/os/ArchLinuxARM-utilite-latest.tar.gz
    cd  ~
    bsdtar  -xpf  root/ArchLinuxARM-utilite-latest.tar.gz  -C  root
    rm  root/ArchLinuxARM-utilite-latest.tar.gz
  8. Copiez les fichiers de démarrage sur la partition de démarrage :

    cp  root/boot/*  boot
  9. Démontez les partitions :

    umount  boot  root
  10. Retirez la carte micro SD de votre ordinateur et insérez-la dans l'Utilite situé sur le panneau avant.

1voto

ibizaman Points 131

C'est comme ça qu'il faut faire. Cela fonctionne avec les rpi de 1ère, 2ème et 3ème génération.

J'ai séparé le code en fonctions bash pour le rendre plus lisible, je l'espère.

Il peut y avoir des éléments étrangers mount / unmounts mais la plupart diskutil Le résultat de cette action est que les volumes sont montés automatiquement par MacOS, nous devons donc les démonter avant de continuer, sinon les commandes échouent en disant que la ressource est occupée.

Nous devons installer quelques dépendances. Cette partie n'est pas aussi automatisée que je le souhaiterais.

curl -OL https://raw.githubusercontent.com/yalp/homebrew-core/fuse-ext2/Formula/fuse-ext2.rb

Maintenant, éditez ce fichier et ajoutez-y après l'élément caveat section :

  patch do
    url "https://github.com/alperakcan/fuse-ext2/files/2576060/0001-Fix-new-Xcode-compilation.patch.txt"
    sha256 "a2a8ff14f36754aead1745b4b5f53b0333376d1bf6abe659ec4eacdbb232aceb"
  end

Maintenant nous installons les dépendances :

brew install \
    findutils \
    e2fsprogs \
    pv

brew install --head ./fuse-ext2.rb

sudo cp -pR /usr/local/opt/fuse-ext2/System/Library/Filesystems/fuse-ext2.fs /Library/Filesystems/
sudo chown -R root:wheel /Library/Filesystems/fuse-ext2.fs

sudo cp -pR /usr/local/opt/fuse-ext2/System/Library/PreferencePanes/fuse-ext2.prefPane /Library/PreferencePanes/
sudo chown -R root:wheel /Library/PreferencePanes/fuse-ext2.prefPane

Enfin, voici le script pour formater la carte SD. Copiez-collez ce script, rendez-le exécutable. chmod a+x FILE et l'appeler avec deux arguments DEVICE et MODEL .

Le script est assez intelligent pour vous proposer des valeurs correctes pour DEVICE et MODEL.

#!/bin/bash

function require_device() {
    local device="$1"
    local usage="$2"
    local available_devices=$(get_available_devices)
    if [ -z "$available_devices" ]; then
        echo "$usage"
        echo
        echo "No compatible device found."
        exit 1
    fi
    if [ -z "$device" ] || ! contains "$available_devices" "$device"; then
        echo "$usage"
        echo
        echo "DEVICE must be one of:"
        echo "$available_devices"
        exit 1
    fi

    echo "/dev/$device"
}

function get_available_devices() {
    diskutil list external physical \
        | grep /dev \
        | cut -d" " -f1 \
        | cut -d/ -f3
}

function require_model() {
    local model="$1"
    local usage="$2"
    local available_models=$(echo -e "rpi\nrpi2\nrpi3")
    if [ -z "$model" ] || ! contains "$available_models" "$model"; then
        echo "$usage"
        echo
        echo "MODEL must be one of:"
        echo "$available_models"
        exit 1
    fi

    echo "$model"
}

function get_arch_filename() {
    local model="$1"

    if [ "$model" = "rpi" ]; then
        echo 'ArchLinuxARM-rpi-latest.tar.gz'
    elif [ "$model" = "rpi2" ]; then
        echo 'ArchLinuxARM-rpi-2-latest.tar.gz'
    elif [ "$model" = "rpi3" ]; then
        echo 'ArchLinuxARM-rpi-3-latest.tar.gz'
    else
        echo "Unsupported model $model"
        exit 1
    fi
}
function download_archlinux() {
    local model="$1"
    local filename="$2"

    echo "Checking if we need to download the latest ArchLinuxARM iso"
    curl --silent --location \
         --output "new-md5-$model" \
         "http://os.archlinuxarm.org/os/$filename.md5"
    local current_md5="$(md5sum "$filename")"

    echo "Newest md5:" "$(cat "new-md5-$model")"
    echo "Current md5:" "$current_md5"

    if [ "$(cat "new-md5-$model")" != "$current_md5" ]; then
        echo "We do, downloading in the background..."
        (
            if curl --silent --location \
                    --remote-name \
                    "http://os.archlinuxarm.org/os/$filename"; then
                echoerr "Download done."
            else
                echoerr "Failed to download."
            fi
        )&
        local process=$!
    else
        echo "We don't, continuing"
        local process=0
    fi

    return "$process"
}

function wait_for_download() {
    local process="$1"

    if [ "$process" -ne 0 ]; then
        echo "Waiting for download to finish."
        wait "$process" || exit 1
    fi
}

function untar_and_copy_arch() {
    local filename="$1"
    local device_dir="$2"

    echo 'Untaring into root.'
    if [ ! -f "$device_dir/root/root/.bootstrap" ]; then
        sudo sh -c "pv $filename | bsdtar -xpf - -C $device_dir/root" \
             && sudo touch "$device_dir/root/root/.bootstrap"
    fi
    sudo mv "$device_dir"/root/boot/* "$device_dir"/boot
    echo 'Running sync, can take a few minutes...'
    sync
}

function umount_device() {
    local tmp_dir="$1"
    local device="$2"

    diskutil unmountDisk "$device"

    if mount | grep "$tmp_dir/root" > /dev/null \
            || mount | grep "${device}s2" > /dev/null; then
        echoerr "Unmounting mounted root."
        sudo umount "$p2"
    fi
}

function mount_device() {
    local tmp_dir="$1"
    local device="$2"

    echo "Mounting $device root and boot on $tmp_dir"
    mkdir -p "$tmp_dir/root" "$tmp_dir/boot" || exit 1
    sudo diskutil mount -mountPoint "$tmp_dir/boot" "${device}s2" || exit 1
    sudo fuse-ext2 "${device}s2" "$tmp_dir/root" -o rw+ || exit 1
}

usage="$0 DEVICE MODEL"

device="$(require_device "$1" "$usage")" || exit 1
device_root="$("${device}s2")"

model="$(require_model "$2" "$usage")" || exit 1
filename="$(get_arch_filename "$model")"

download_archlinux "$model" "$filename"
process="$?"

umount_device "$tmp_dir" "$device"

diskutil partitionDisk "$device" 2 MBR \
        "MS-DOS FAT32" BOOT 100M \
        "MS-DOS FAT32" ROOT R \
        || exit 1
umount_device "$tmp_dir" "$device"

format_ext4 "$device_root" ROOT || exit 1

wait_for_download "$process"

sleep 3
umount_device "$tmp_dir" "$device"
mount_device "$tmp_dir" "$device"

untar_and_copy_arch "$filename" "$tmp_dir"

umount_device "$tmp_dir" "$device"

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X