Создаём образ Linux-дистрибутива совместимый с 32-битными EFI Mac Pro

Большинство современных образов Linux дистрибутивов поддерживают как BIOS, так и EFI и как правило хранятся в одном образе дистрибутива.

Однако когда Mac Pro с 32 битным EFI пытается загрузить образ Linux-дистрибутива, он застревает на "выбрать тип загрузки" и так как Mac Pro ещё не загрузил драйвера клавиатуры, нельзя ничего выбрать.

Самое правильное решение - это изменить образ диска и оставить только поддержку BIOS.

Для этих целей нам поможет простой скрипт, написанный на языке C:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

// source: https://bugs.launchpad.net/ubuntu-cdimage/+bug/1298894/comments/16

// static char *iso_name = {"mac.iso"};

int main(int argc, char **argv)
{
  int fd, ret;
  unsigned char buf[2048 - 64];
  off_t lba;
  size_t buf_size = 2048 - 64;

  if (argc < 2) {
    fprintf(stderr, "No iso name assigned\n");
    exit(1);
  }

  char *iso_name = argv[1];

  fd = open(iso_name, O_RDWR);
  if (fd == -1)
    goto err_ex;
  if (lseek(fd, (off_t) 32768 + 2048 + 71, SEEK_SET) == -1)
    goto err_ex;
  ret = read(fd, buf, 4);
  if (ret == -1)
    goto err_ex;
  if (ret < 4) {
    fprintf(stderr, "Cannot read 4 bytes from %s\n", iso_name);
    exit(1);
  }
  lba = buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
  if (lseek(fd, lba * 2048 + 64, SEEK_SET) == -1)
    goto err_ex;
  memset(buf, 0, buf_size);
  ret = write(fd, buf, buf_size);
  if (ret == -1)
    goto err_ex;
  if (ret < buf_size) {
    fprintf(stderr, "Cannot write %d bytes to %s\n", (int) buf_size, iso_name);
    exit(1);
  }
  close(fd);
  printf("done\n");
  exit(0);
err_ex:;
  perror(iso_name);
  exit(1);
}
  • Сохраним его как "isomacprog.c".

  • Установим все необходимые зависимости

sudo apt-get install gcc libc6-dev
  • Скомпилируем приложение:
cc -g -Wall isomacprog.c -o isomacprog
  • После этого сделаем копию оригинального ISO нашего дистрибутива linux и передадим её нашему приложению:
cp original.iso macversion.iso
./isomacprog macversion.iso
  • Теперь остается записать новый образ на CD/DVD и загрузиться с него.

Оставьте комментарий!

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий:


Написать новый комментарий

Видео

Самые полезные видео на темы "веб-разработка", "Linux" и "IT". Смотри и обучайся!

Подробнее »

Сделки

Самые горячие и выгодные сделки, акции и скидки на видео-курсы, софт, услуги, книги и железо из всего рунета.

Подробнее »

Планета

Наша планета собирает интересные статьи из различных источников и объединяет их в одну ленту. Которую можно читать на нашем сайте.

Подробнее »