10 votos

¿Cómo puedo crear una unidad de arranque para ArchLInux en macOS?

Estoy tratando de averiguar cómo hacer el equivalente de estas instrucciones para crear una unidad de arranque de archlinux en una Mac. (Estoy usando un adaptador Micro SD a USB.) Encontré estas instrucciones sobre cómo particionar una unidad flash, pero no estoy seguro de cómo aplicarlas, ya que las instrucciones que estoy tratando de "traducir" a términos de macOS hablan sobre sectores, y eso es mucho más bajo nivel de lo que estoy acostumbrado a trabajar. Para ser explícitamente claro, mi pregunta es: ¿cómo logro lo mismo que en las instrucciones usando macOS 10.12.6? ¡Gracias!

0 votos

¿Hay disponible una imagen .iso de ArchLinux para la plataforma que necesitas? ¡Haría las cosas mucho más fáciles :-)

0 votos

Intenté buscar uno y no encontré ninguno, pero también obtuve muchos resultados de búsqueda espurios. Encontré un hilo de discusión en un foro (archlinuxarm.org/forum/viewtopic.php?f=47&t=7996) de hace unos años que hacía referencia a descargar un ISO para una plataforma diferente, pero el enlace al que lleva (archlinuxarm.org/platforms/armv7/samsung/…) ya no tiene un ISO.

0 votos

Su enlace es para procesadores de arquitectura ARM. Los Mac utilizan procesadores Intel que tienen una arquitectura x64. ¿Estás seguro de que no querías decir este sitio web?

9voto

David Anderson Puntos 2189

No hay ningún comando en MacOS para formatear una partición para usar un sistema de archivos linux. En otras palabras, no hay un equivalente para el Arch Linux mkfs.ext4 de mando. Hay muchas soluciones posibles para este problema. A continuación se presenta una de ellas.

Propongo que la mejor manera, para lograr la creación de la unidad de arranque, es arrancar el sistema operativo Arch Linux en su Mac. Esto le permitirá utilizar los comandos mostrados en el enlace web que usted proporcionó. Este arranque de Arch Linux se hará desde una unidad flash de 1 GB o más. La ventaja de usar una unidad flash es que no tendrá que instalar Arch Linux en ninguna de sus unidades internas.

Método manual para crear una unidad flash Arch Linux de arranque para Mac

Nota: Puede copiar y pegar cada uno de los comandos siguientes en la ventana de la aplicación Terminal. Esto reducirá la cantidad de escritura y el riesgo de errores de escritura.

  1. Descargar un .iso archivo. El archivo compatible con Mac que elegí para descargar se llama archlinux-2017.12.01-x86_64.iso . Puede encontrar este archivo en Sitio web de Arch Linux . Este archivo se descargó en mi carpeta de "Descargas". Supongo que usted hará lo mismo.

  2. Abra una ventana de la aplicación Terminal. Introduzca el siguiente comando para navegar a su carpeta "Descargas".

    cd  ~/Downloads
  3. Convierte esto .iso a un formato compatible con las unidades flash. El siguiente comando realiza esta tarea.

    hdiutil  convert  archlinux-2017.12.01-x86_64.iso  -format  UDRW  -o  target.img
  4. El .dmg se pueden añadir caracteres al nombre del archivo de salida. Introduzca el siguiente comando para comprobar si esto ha ocurrido.

    ls  target.img.dmg

    Si el archivo se llama target.img.dmg aparece, entonces introduzca el siguiente comando para renombrar este archivo.

    mv  -f  target.img.dmg  target.img
  5. Introduzca el siguiente comando para obtener un antes de lista de unidades.

    ls  /dev  |  egrep  ^disk\\d+$
  6. Inserte su unidad flash.

  7. Vuelva a introducir el siguiente comando para obtener un después de lista de unidades. A continuación, determine el identificador asignado a su unidad flash (por ejemplo, el identificador que no apareció en el paso 5)

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

    Nota: En los pasos siguientes, sustituya diskN con el identificador asignado a la unidad flash.

  8. Introduzca el siguiente comando para desmontar la unidad flash.

    diskutil  unmountdisk  diskN

    Nota: Si ve el error Unmount of diskN failed: at least one volume could not be unmounted Abra la aplicación Utilidad de Discos y desmonte los volúmenes (no los expulse).

  9. Introduzca el siguiente comando para copiar target.img a su unidad flash.

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

    Tenga en cuenta lo siguiente:

    • Este comando le pedirá que introduzca su contraseña de acceso.
    • Para ver el progreso de la operación de copia, pulse la tecla control + T mientras se ejecuta el comando.
    • Utilizando /dev/rdisk en lugar de /dev/disk puede ser más rápido.
    • Si ve el error dd: Invalid number '1m' , está utilizando el programa GNU dd de mando. Utilice el mismo comando pero sustituya bs=1m con bs=1M .
    • Si ve el error dd: /dev/diskN: Resource busy Asegúrese de que la unidad no está en uso. Abra la aplicación Utilidad de Discos y desmonte los volúmenes (no los expulse).
  10. Cuando el comando "dd" se complete, recibirá el siguiente mensaje emergente. Debe seleccionar "Ignorar".

    e1

    Nota: El disco (unidad flash) es legible por su ordenador. El mensaje debería decir: "El disco que ha insertado no es legible por MacOS".

    Para continuar con la siguiente parte de este procedimiento, deberá dejar la unidad flash conectada. Si necesita expulsar la unidad flash, puede utilizar la aplicación Utilidad de Discos o introducir el comando que se indica a continuación.

    diskutil  eject  /dev/diskN

Inicialización de la tarjeta Micro SD

Las instrucciones, usted se refirió a En el caso de la tarjeta micro SD, se supone que no está inicializada o que ha sido inicializada con MBR sin particiones. Es posible que desee realizar los siguientes pasos para asegurarse de que su tarjeta micro SD está correctamente inicializada.

  1. Introduzca el siguiente comando para obtener un antes de lista de unidades.

    ls  /dev  |  egrep  ^disk\\d+$
  2. Utilizando el adaptador, conecte la tarjeta micro SD en el Mac.

  3. Vuelva a introducir el siguiente comando para obtener un después de lista de unidades. A continuación, determine el identificador asignado a su tarjeta micro SD (por ejemplo, el identificador que no apareció en el paso 1)

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

    Nota: En los pasos siguientes, sustituya diskN con el identificador asignado a la tarjeta micro SD.

  4. Introduzca el siguiente comando para inicializar la tarjeta micro SD.

    diskutil  partitiondisk  diskN  1  mbr  free  none  r
  5. Introduzca el siguiente comando para desmontar la tarjeta micro SD.

    diskutil  eject  diskN

Arranque de su Mac en Arch Linux

  1. Si la unidad flash Arch Linux de arranque para Mac no está conectada, hágalo ahora.
  2. Reinicie su Mac e inmediatamente mantenga pulsada la tecla option hasta que aparezca el Gestor de Inicio.
  3. Seleccione el icono denominado "EFI Boot" y, a continuación, seleccione la flecha situada debajo de la etiqueta.
  4. Seleccione "Arch Linux archiso x86_64 UEFI CD" o espere a que esto ocurra automáticamente.

Nota sobre los identificadores de unidad

El hardware utilizado por las máquinas que ejecutan los sistemas operativos Linux, Unix, MacOS y OS X heredados recibe identificadores de dispositivo de cadena de caracteres. En el contexto de su pregunta, sólo se trata de dispositivos que son unidades de disco. El sistema operativo MacOS utiliza diskN para identificar discos duros, SSD, tarjetas SD, tarjetas micro SD, unidades flash USB, etc. El valor N es un número entero mayor que cero. El sistema operativo Arch Linux utiliza un esquema diferente. Aquí, la forma del identificador de la unidad es sdX , donde X es una letra minúscula del alfabeto inglés.

Creación de tarjetas Micro SD

Nota: Dado que está arrancando con una versión "Live" de Arch Linux, he realizado algunos cambios en el procedimiento usted se refirió a .

  1. Introduzca una tarjeta micro SD en su ordenador y registre qué identificador de dispositivo es ( dmesg | tail )

  2. Asegúrese de que no está montado ( umount /dev/sdX* o umount /dev/mmcblk* )

  3. Inicie fdisk para particionar la tarjeta SD:

    fdisk  /dev/sdX
  4. En el fdisk crear las nuevas particiones:

    a. Tipo n entonces p para las primarias, 1 para la primera partición de la unidad, el return para aceptar los sectores de inicio por defecto, y +100M para el sector final.

    b. Tipo t para establecer el tipo, y luego c para ponerlo en FAT.

    c. Tipo n entonces p para las primarias, 2 para la segunda partición, y pulse la tecla return dos veces para aceptar los valores por defecto.

    d. Salga escribiendo w .

  5. Crear y montar el sistema de archivos vfat:

    mkfs.vfat  /dev/sdX1
    mkdir  boot
    mount  /dev/sdX1 boot
  6. Crear y montar el sistema de archivos ext4:

    mkfs.ext4  /dev/sdX2
    mkdir  root
    mount  /dev/sdX2 root
  7. Descargue y extraiga el sistema de archivos root:

    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. Copie los archivos de arranque en la partición de arranque:

    cp  root/boot/*  boot
  9. Desmontar las particiones:

    umount  boot  root
  10. Saque la tarjeta micro SD de su ordenador e insértela en el Utilite del panel frontal

0 votos

Realmente aprecio la respuesta detallada. Dado que tengo acceso a una máquina que ejecuta Linux (un Chromebook con Gallium OS), en lugar de crear una unidad USB arrancable para mi Mac, pude usar eso. La parte más útil de tu respuesta fue No hay un comando en macOS para formatear una partición para usar un sistema de archivos linux. En otras palabras, no hay un equivalente para el comando mkfs.ext4 de Arch Linux.

0 votos

Por supuesto, estoy teniendo problemas no relacionados con la partición (versión incorrecta de bsdtar, entre otros), ¡pero es una experiencia de aprendizaje!

0 votos

No obtuve ninguna indicación de que el comando bsdtar fallara, pero no tengo ninguna máquina ARM para probarlo.

1voto

ibizaman Puntos 121

Así es como se hace. Esto funciona con rpi de 1ra, 2da y 3ra generación.

Separé el código en funciones de bash para que sea más legible, espero.

Puede que haya mount/unmounts innecesarios, pero la mayoría de las acciones de diskutil resultan en que los volúmenes se monten automáticamente por MacOS, por lo que necesitamos desmontarlos antes de continuar, de lo contrario los comandos fallarán diciendo que el recurso está ocupado.

Necesitamos instalar algunas dependencias. Esta parte no está tan automatizada como me gustaría.

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

Ahora edita ese archivo y añade después de la sección de caveat:

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

Ahora instalamos las dependencias:

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

Finalmente, este es el script para formatear la tarjeta SD. Copia y pega este script, hazlo ejecutable chmod a+x FILE y llámalo con dos argumentos DEVICE y MODEL.

El script es lo suficientemente inteligente como para proponerte los valores correctos para DEVICE y 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 se encontró ningún dispositivo compatible."
        exit 1
    fi
    if [ -z "$device" ] || ! contains "$available_devices" "$device"; then
        echo "$usage"
        echo
        echo "DEVICE debe ser uno de:"
        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 debe ser uno de:"
        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 "Modelo no soportado $model"
        exit 1
    fi
}
function download_archlinux() {
    local model="$1"
    local filename="$2"

    echo "Comprobando si necesitamos descargar la última iso de ArchLinuxARM"
    curl --silent --location \
         --output "new-md5-$model" \
         "http://os.archlinuxarm.org/os/$filename.md5"
    local current_md5="$(md5sum "$filename")"

    echo "Md5 más reciente:" "$(cat "new-md5-$model")"
    echo "Md5 actual:" "$current_md5"

    if [ "$(cat "new-md5-$model")" != "$current_md5" ]; then
        echo "Sí, descargando en segundo plano..."
        (
            if curl --silent --location \
                    --remote-name \
                    "http://os.archlinuxarm.org/os/$filename"; then
                echoerr "Descarga finalizada."
            else
                echoerr "No se pudo descargar."
            fi
        )&
        local process=$!
    else
        echo "No es necesario, continuando"
        local process=0
    fi

    return "$process"
}

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

    if [ "$process" -ne 0 ]; then
        echo "Esperando a que termine la descarga."
        wait "$process" || exit 1
    fi
}

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

    echo 'Descomprimiendo en la 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 'Ejecutando sync, puede llevar unos minutos...'
    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 "Desmontando la root montada."
        sudo umount "$p2"
    fi
}

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

    echo "Montando la root y el boot de $device en $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
}

uso="$0 DEVICE MODELO"

dispositivo="$(require_device "$1" "$uso")" || exit 1
dispositivo_raíz="$("${device}s2")"

modelo="$(require_model "$2" "$uso")" || exit 1
filename="$(get_arch_filename "$modelo")"

download_archlinux "$modelo" "$filename"
proceso="$?"

umount_device "$tmp_dir" "$dispositivo"

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

format_ext4 "$dispositivo_raíz" ROOT || exit 1

wait_for_download "$proceso"

sleep 3
umount_device "$tmp_dir" "$dispositivo"
mount_device "$tmp_dir" "$dispositivo"

untar_and_copy_arch "$filename" "$tmp_dir"

umount_device "$tmp_dir" "$dispositivo"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X