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 !
Réponses
Trop de publicités?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.
-
Télécharger un
.iso
fichier. Le fichier compatible Mac que j'ai choisi de télécharger s'appellearchlinux-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. -
Ouvrez une fenêtre de l'application Terminal. Entrez la commande suivante pour naviguer dans votre dossier "Downloads".
cd ~/Downloads
-
Convertir ceci
.iso
dans un format compatible avec les lecteurs flash. Thdiutil convert archlinux-2017.12.01-x86_64.iso -format UDRW -o target.img
-
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
-
Entrez la commande ci-dessous pour obtenir un avant liste des lecteurs.
ls /dev | egrep ^disk\\d+$
-
Insérez votre clé USB.
-
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. -
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). -
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 GNUdd
commandement. Utilisez la même commande mais remplacezbs=1m
avecbs=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).
-
Lorsque la commande 'dd' est terminée, vous recevez le message suivant. Vous devez sélectionner "Ignorer".
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.
-
Entrez la commande ci-dessous pour obtenir un avant liste des lecteurs.
ls /dev | egrep ^disk\\d+$
-
À l'aide de l'adaptateur, branchez la carte micro SD sur le Mac.
-
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. -
Entrez la commande suivante pour initialiser la carte micro SD.
diskutil partitiondisk diskN 1 mbr free none r
-
Entrez la commande ci-dessous pour démonter la carte micro SD.
diskutil eject diskN
Démarrer votre Mac sur Arch Linux
- Si la clé USB Mac bootable Arch Linux n'est pas branchée, faites-le maintenant.
- Redémarrez votre Mac et maintenez immédiatement enfoncée la touche option jusqu'à ce que le gestionnaire de démarrage apparaisse.
- Sélectionnez l'icône intitulée "EFI Boot", puis sélectionnez la flèche sous l'étiquette.
- 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 sdX
où X
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 .
-
Insérez une carte micro SD dans votre ordinateur et enregistrez l'identifiant de l'appareil (
dmesg | tail
) -
Assurez-vous qu'il n'est pas monté (
umount /dev/sdX*
oumount /dev/mmcblk*
) -
Début
fdisk
pour partitionner la carte SD :fdisk /dev/sdX
-
Au
fdisk
créez les nouvelles partitions :a. Type
n
alorsp
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, puisc
pour le régler sur FAT.c. Type
n
alorsp
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
. -
Créer et monter le système de fichiers vfat :
mkfs.vfat /dev/sdX1 mkdir boot mount /dev/sdX1 boot
-
Créer et monter le système de fichiers ext4 :
mkfs.ext4 /dev/sdX2 mkdir root mount /dev/sdX2 root
-
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
-
Copiez les fichiers de démarrage sur la partition de démarrage :
cp root/boot/* boot
-
Démontez les partitions :
umount boot root
-
Retirez la carte micro SD de votre ordinateur et insérez-la dans l'Utilite situé sur le panneau avant.
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"