Mohon tunggu...
Christo
Christo Mohon Tunggu...

Peace seeker

Selanjutnya

Tutup

Tekno

Sebuah Drama Mesin 64-bit dengan 32-bit EFI

21 Desember 2017   16:17 Diperbarui: 22 Desember 2017   15:06 0 0 0 Mohon Tunggu...

Saya memiliki Macbook Putih lama dengan Intel Core 2 Duo T7200, 4GB ram, dan 60 GB HDD, baterai masih tahan 2-3 jam, fisik masih lumayan, boot time juga masih oke bahkan untuk standar komputer jaman sekarang. Hanya saja dengan OS X 10.6.8, semua jadi amat menjengkelkan. Semua software tidak lagi bisa diinstall, Chrome stuck di versi lama mengakibatkan beberapa modern webapp tidak bisa load dengan sempurna. Mau update jadi Mac OS? Nggak deh makasih. 

Sebagai pengguna Ubuntu, sudah jelas opsi pilihan saya jatuh ke OS yang satu ini. (Laptop saya sekarang Macbook Air dengan Ubuntu Mate 16.04 LTS). Tanpa banyak pikir saya masukkan DVD dengan Ubuntu Mate 16.04.3 64-bit ke dalam Superdrive lalu tekan power button sambil menekan C. Di luar ekspektasi saya, di layar hanya tertera "Select CD-ROM boot type" dan keyboard tidak berfungsi, tidak bisa melakukan apapun. 

Hal ini lumayan di luar dugaan saya karena instalasi Ubuntu di mesin Apple selalu sukses, bahkan saya telah melakukan instalasi Ubuntu 12.04 di Macbook Black sebelumnya (sama-sama Core 2 Duo). Usut punya usut, waktu itu saya menggunakan 32-bit iso, dan sekarang saya menggunakan 64-bit iso. Macbook 2,1 memang 64-bit namun ternyata menggunakan 32-bit EFI.

Setelah menelusuri ini saya menemukan  solusi sederhana untuk mengubah disk image menjadi BIOS-only (non-EFI). 

Compiling-nya simple, terimakasih kepada Thomas Schmitt (scdbackup) yang memberikan script C, untuk yang awam saya coba walk-through sedikit (walau tulisan ini bukan tutorial sebenarnya)... Simpan ini dlam satu file dengan nama terserah anda misal junaedi.c

#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);
}

Jangan lupa mengganti trusty-desktop-amd64.iso dengan nama iso yang anda download. (!penting)

Supaya mudah saya menaruh junaedi.c dan iso yang saya download ke /Users/[useranda] lalu compile dengan cc:

cc -g -Wall -o junaedi junaedi.c

HALAMAN :
  1. 1
  2. 2