yllEFIlt

Under påskhelgen har jag försökt installera Linux på en extern hårddisk kopplad till en iMac. Installationen från gentoos installations-CD gick smärtfritt. Skillnaden mot en vanlig installation var att den externa hårddisken blev /dev/sdc (istället för sda, som den interna brukar bli). Sen började problemen, vilket resulterade i en långfredag som verkligen gjorde skäl för sitt namn. Macen bootar nämligen inte via BIOS utan via ett nytt påfund som kallas EFI. Efter många försök hittade jag ett sätt som fungerade. Allt nedan sker ifrån Linux. Stanna vid installationen av grub (kör inte install-grub) och boota inte om datorn än.

grub

GRUB sjösatt av reEFInd

Installera en bootloader som stödjer EFI

Jag använde GRUB Legacy, version 0.97, med EFI-patchar. Länken i förra meningen leder till en sida som bland annat listar filen grub-efi-0.97-84.fc16.x86_64.tgz. Ladda hem och packa upp den i en temporär katalog. Endast filen boot/efi/EFI/redhat/grub.efi är nödvändig, så kopiera ut den från tempkatalogen. Sen kan både tempkatalogen och tgz-filen raderas.

iMacens inbyggda hårddisk, /dev/sda, har i mitt fall följande partitioner:

Number   Size       Code  Name
   1    200.0 MiB   EF00  EFI System Partition
   2    930.7 GiB   AF00  Untitled
   3    619.9 MiB   AB00  Recovery HD

Den första, som då blir sda1, är en speciell EFI-partition där grub.efi kan placeras. Den har filtypen vfat, som fungerar bra att montera från Linux. Skapa en katalog mnt direkt under hemkatalogen och montera sda1 där:


cd ~/
mkdir mnt
mount /dev/sda1 mnt/
cd mnt

Var försiktig nu och ta inte bort någonting från EFI-partitionen. Skapa bara en ny katalog med namnet gentoo under katalogen EFI och rör ingenting utanför den katalogen:

mkdir -p EFI/gentoo

Kopiera in grub.efi. Kör inte grub-install. Om grub.efi ligger direkt i din hemkatalog (och du står i den monterade katalogen mnt/) blir kommandot:

cp ~/grub.efi EFI/gentoo/

Skapa sen filen grub.conf i samma katalog, så här ser min ut:

EFI/gentoo/grub.conf


default 0
timeout 7
splashimage=/EFI/gentoo/splash.xpm.gz

title=USB Disk
  kernel /EFI/gentoo/vmlinuz root=/dev/sdc3 scandelay=2 snd-hda-intel.model=imac27_122 hid-apple.iso_layout=0
  initrd /EFI/gentoo/initrd

Det viktigaste är att ändra sdc3 ovan till namnet på partitionen där Linux är installerat. Se notiser längst ner för övriga parametrar på kernel-raden.

Från grub.conf ovan refereras tre filer till som också behöver kopieras till EFI-partitionen. Börja med splashbilden (som följer med vanliga grub och ligger under /boot/grub):

cp /boot/grub/splash.xpm.gz EFI/gentoo/

De andra två filerna är Linuxkerneln vmlinuz och ramdisken initrd, men de måste skapas innan de kan kopieras 🙂 Skapelsen väntar otåligt på kommandot:

genkernel all --no-splash --no-clean

Men vänta. Först måste kerneln konfigureras. Här är en konfiguration som fungerar med min iMac (modell 12,2) som du kan utgå från. På grund av restriktioner i wordpress har den ändelsen .doc. Ladda ner den och ta bort .doc. Packa sen upp och kopiera filen till /usr/src/linux/.config. Nu kan kerneln konfigureras ytterligare med make menuconfig (eller med –menuconfig till genkernel):


mv config-3710-gentoo-bz2.doc config-3710-gentoo.bz2
bunzip2 config-3710-gentoo.bz2
mv config-3710-gentoo /usr/src/linux/.config
genkernel all --no-splash --no-clean --menuconfig

Efter att kerneln och ramdisken är byggda kan de kopieras till EFI-partitionen. Byt samtidigt namn på dem till vmlinuz och initrd, så det stämmer med grub.conf:


cd ~/mnt/
cp /boot/kernel-genkernel-x86_64-3.7.10-gentoo EFI/gentoo/vmlinuz
cp /boot/initramfs-genkernel-x86_64-3.7.10-gentoo EFI/gentoo/initrd

Nästa gång kerneln kompileras om behöver inte grub.conf ändras, det räcker att kopiera över de gamla vmlinuz- och initrdfilerna med den nya kerneln och den nya ramdisken.

Så är verket fullbordat och EFI-partitionen (/dev/sda1, monterad på ~/mnt) kan avmonteras:

cd ~/
umount mnt/

Klart!

Starta bootloadern

refind

rEFInd in action

Nu behöver bara grub.efi startas på något sätt. Detta kan t.ex. göras med programmet rEFInd (vidareutveckling av rEFIt). rEFInd kommer automatiskt hitta grub.efi om den ligger under EFI/gentoo på EFI-partitionen.

Om du har en CD/DVD läsare kan du ladda ner ISO-filen från rEFInd-länken ovan och bränna. Boota sen från CD:n genom att antingen hålla ner ‘option’ eller ‘c’ när datorns startljud går igång och välj ”Boot EFI\gentoo\grub.efi from EFI”, som på bilden. När allting väl fungerar går det att installera rEFInd direkt på datorn (för att slippa bootskivan). Ladda ner filen binary zip file från samma sida, packa upp den och kör install.sh från OS X. Var dock medveten om att rEFInd i så fall kommer köras varje gång datorn startas. Alternativet är att fortsätta använda rEFInd-CD:n för att boota Linux.

boot

Förhärligad och be­fri­ad ur sitt sla­ve­ri un­der förgäng­el­sen

Notiser

Kernelparametrar i grub.conf:

  • rootfstype – Kan behövas läggas till om filsystemet för root är kompilerat som modul.
  • scandelay – Behövdes i mitt fall så att kerneln hinner detektera den externa USB-disken innan den försöker montera rootpartitionen. Den kan eventuellt tas bort eller minskas till 1.
  • snd-hda-intel.model=imac27_122 – peka ut den exakta modellen för ljuddrivaren (se /usr/src/linux/sound/pci/hda/patch_cirrus.c för fler modeller)
  • hid-apple.iso_layout=0 – Fixa till mappningen på apple-tangentbord. Behövs ej med ”vanligt” tangentbord. Se /usr/src/linux/drivers/hid/hid-apple.c. Det går även att sätta hid-apple.fnmode=2 för att F1, F2 etc ska fungera som ”vanligt”. Utan denna option fungerar de som multimediatangenter. För att fungera som F-tangenter måste då fn-knappen användas.
  • video – FB_EFI behöver vara inkompilerat i kerneln, men jag behövde inte ange någon parameter i grub.conf.

X

  • Jag har bara testat xorg-server + ati-drivers, det fungerade perfekt. Kompilera inte in någon radeon-drivare i kerneln om du ska använda ati-drivers
  • oclHashcat-plus-0.14 kräver exakt version 13.1 av ati-drivers (Catalyst är ett annat namn för ati-drivers). Version 13.1 är för närvarande default i gentoo, använd inte ~amd64 keyword till ati-drivers, då installeras en nyare betaversion av Catalyst som inte är kompatibel med hashcat 0.14.
  • Kontrollera att eselect opencl är satt till amd och att eselect opengl är satt till ati.
  • När X avslutas försvinner skärmen, men tangentbordet fungerar fortfarande. Om du inte vill skriva i blindo, se till att stänga ner datorn från X (shutdown, reboot eller grafisk ”stäng-ned knapp” i fönsterhanteraren).

Övrigt

  • Katalogen EFI/gentoo kan även läggas under en hfsplus partiton (partition nummer 2 i mitt fall). Men hfsplus kan för närvarande inte monteras read/write från Linux om journalföring är aktiverat, så det är enklare att använda EFI-partitionen.
  • Filen vmlinuz visas automatiskt som ett separat bootalternativ av rEFInd, trots att den inte fungerar att starta direkt (men om EFI_STUB kompileras in i kerneln kan det funka, om du har tur). För att stänga av visningen av vmlinuz, och endast visa grub.efi, kommentera bort raden scan_all_linux_kernels i filen /EFI/refind/refind.conf (från OS X).
  • Mer info om Linux på Aluminium iMac.
Advertisements

Om albertveli

Grävande programmerare.
Det här inlägget postades i Linux/DIY. Bokmärk permalänken.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s