Como converter imagem ISO do Ubuntu multi-catálogo para inicializá-lo no Macbook 2.1? [fechadas]

1

Eu estava lutando por um longo tempo com a instalação do Linux no meu Macbook 2,1 a partir de meados de 2007 sem sorte. Finalmente eu consegui instalar o Xubuntu i386 e tentei também o Ubuntu 14.10 + mac ISO. Ambas as instalações são bem-sucedidas, mas estou usando um hardware bem antigo e, por fim, gostaria de usar o Xubuntu 16.10, que é instalado como ISOs mais recentes do Ubuntu (quais são as alterações descritas O que há de diferente na imagem ISO do Mac? , como imagens multi-catálogo e meu antigo Macbook não consegue inicializá-las. E então eu ' Tenho uma pergunta como converter tal multi-catálogo ISO para "catálogo único", tão velho Mac pode inicializá-lo?

    
por Krzysztof Jakóbczyk 16.06.2016 / 14:43

1 resposta

0

A resposta está em imagens amd64 + mac que não são mais necessárias . Eu tentei isso em um iMac, final de 2006, core 2 duo, e funciona.

Você pode usar o mkisofs com a combinação correta de opções, mas esse método é à prova de erros.

% bl0ck_qu0te%
/*
 Removes all entries but the first one from the El Torito boot catalog of
   http://cdimage.ubuntu.com/daily-live/current/trusty-desktop-amd64.iso

 Compile by:
   cc -g -Wall -o make_single_eltorito make_single_eltorito.c

 Run without arguments in the directory where the ISO image is stored.
*/

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

static char *iso_name = {"trusty-desktop-amd64.iso"};

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

  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);
}
    
por Adam 17.06.2016 / 08:00