Awesome Open Source
Awesome Open Source

mbp-fedora

Build Status

Fedora ISO with Apple T2 patches built-in (Macbooks produced >= 2018).

All available Apple T2 drivers are integrated with this iso. Most things work, besides those mentioned in not working section.

Kernel - https://github.com/mikeeq/mbp-fedora-kernel

Drivers:

Tested on: Macbook Pro 15,2 13" 2019 i5 TouchBar Z0WQ000AR MV972ZE/A/R1

Boot ROM Version:	220.270.99.0.0 (iBridge: 16.16.6571.0.0,0)
macOS Mojave: 10.14.6 (18G103)

How to install

  • Turn off secure boot - https://support.apple.com/en-us/HT208330

  • Download .iso from releases section - https://github.com/mikeeq/mbp-fedora/releases/latest

  • Burn the image on USB stick >=8GB via:

  • Install Fedora

    • Boot directly from macOS boot manager. (You can boot into it by pressing and holding option key after clicking the power-on button).
      • There will be three boot options available, usually the third one works for me. (There are three of them, because there are three partitions in ISO: 1) ISO9660: with installer data, 2) fat32, 3) hfs+)
    • I recommend to shrink (resize) macOS APFS partition and not removing macOS installation entirely from your MacBook, because it's the only way to keep your device up-to-date. macOS OS updates also contains security patches to EFI/Apple T2
    • You should use standard partition layout during partitioning your Disk in anaconda, because i haven't tested LVM scenario yet. https://github.com/mikeeq/mbp-fedora/issues/2
      • /boot/efi - 1024MB Linux HFS+ ESP
      • /boot - 1024MB EXT4
      • / - xxxGB EXT4
    • There will be an error on Installing bootloader... step, click Yes - It's related to efi=noruntime kernel arg bootloader issue
    # /tmp/anaconda.log
    13:39:49,173 INF bootloader.grub2: bootloader.py: used boot args: resume=UUID=8a64abbd-b1a3-4d4a-85c3-b73800e46a1e rd.lvm.lv=fedora_localhost-live/root rd.lvm.lv=fedora_localhost-live/swap rhgb quiet
    13:39:54,649 ERR bootloader.installation: bootloader.write failed: Failed to set new efi boot target. This is most likely a kernel or firmware bug.
    
  • Put wifi firmware files to /lib/firmware/brcm/

  • To install additional languages, install appropriate langpack via dnf dnf search langpack

  • After login you can update kernel by running sudo update_kernel_mbp

  • You can change mappings of ctrl, option keys (PC keyboard mappings) by creating /etc/modprobe.d/hid_apple.conf file and recreating grub config. All available modifications could be found here: https://github.com/free5lot/hid-apple-patched

# /etc/modprobe.d/hid_apple.conf
options hid_apple swap_fn_leftctrl=1
options hid_apple swap_opt_cmd=1

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
  • To change function key mappings for models with touchbar see modinfo apple_ib_tb and use echo 2 > /sys/class/input/*/device/fnmode instead of the hid_apple options. See this issue

Not working

  • Dynamic audio input/output change (on connecting/disconnecting headphones jack)
  • TouchID - (@MCMrARM is working on it - https://github.com/Dunedan/mbp-2016-linux/issues/71#issuecomment-528545490)
  • Thunderbolt (is disabled, because driver was causing kernel panics (not tested with 5.5 kernel))
  • Microphone (it's recognised with new apple t2 sound driver, but there is a low mic volume amp)

TODO

  • add Fedora icon to usb installer

  • alsa/pulseaudio config

    • Dynamic audio input/output change (on connecting/disconnecting headphones jack)
    ## to manually change audio profile via PulseAudio cli execute
    # to headphones output
    pacmd set-card-profile $(pacmd list-cards | grep -B6 'alsa.card_name = "Apple T2 Audio"' | head -n1 | cut -d':' -f 2) output:codec-output+input:codec-input
    
    # to speakers output
    pacmd set-card-profile $(pacmd list-cards | grep -B6 'alsa.card_name = "Apple T2 Audio"' | head -n1 | cut -d':' -f 2) output:builtin-speaker+input:builtin-mic
    
  • disable iBridge network interface (awkward internal Ethernet device?)

  • disable not working camera device

    • there are two video devices (web cameras) initialized/discovered, don't know why yet
    ➜ ls -l /sys/class/video4linux/
    total 0
    lrwxrwxrwx. 1 root root 0 Aug 23 15:14 video0 -> ../../devices/pci0000:00/0000:00:1d.4/0000:02:00.1/bce/bce/bce-vhci/usb7/7-2/7-2:1.0/video4linux/video0
    lrwxrwxrwx. 1 root root 0 Aug 23 15:14 video1 -> ../../devices/pci0000:00/0000:00:1d.4/0000:02:00.1/bce/bce/bce-vhci/usb7/7-2/7-2:1.0/video4linux/video1
    ➜ cat /sys/class/video4linux/*/dev
    81:0
    81:1
    
  • verify brcmf_chip_tcm_rambase returns

Known issues

  • Kernel/Mac related issues are mentioned in kernel repo
  • Anaconda sometimes could not finish installation process and it's freezing on Network Configuration step, probably due to iBridge internal network interface

workaround - it's a final step of installation, just reboot your Mac (installation is complete)

  • Wifi could have problems with connecting to secure networks (WPA2)

    • wpa_supplicant error - CTRL-EVENT-ASSOC-REJECT bssid= status_code=16
      • there are two workaround available:

        • you can stick with wpa_supplicant as wifi backend and you will need to reload broadcom module every time you connect to network
        ## Run as root
        modprobe -r brcmfmac; modprobe brcmfmac
        
        • or you can change your wifi backend to iwd (it's less problematic, it's crashing sometimes, but it's more stable than wpa_supplicant [with broadcom wifi])
        ### iwd is now installed by default installation instructions mentioned below are for older Fedora installations
        
        ## Run all commands as root
        # Change wifi backend which NetworkManager is using
        vi /etc/NetworkManager/conf.d/wifi_backend.conf
        
        [device]
        wifi.backend=iwd
        
        # enable iwd autostart
        systemctl enable iwd
        
        # start iwd
        /usr/libexec/iwd
        systemctl start iwd
        systemctl restart NetworkManager
        
        ## If you want to switch back to wpa_supplicant just remove/rename `/etc/NetworkManager/conf.d/wifi_backend.conf` file, i.e.:
        mv /etc/NetworkManager/conf.d/wifi_backend.conf /etc/NetworkManager/conf.d/wifi_backend.conf_iwd
        
  • Macbooks with Apple T2 can't boot EFI binaries from HFS+ formatted ESP - only FAT32 (FAT32 have to be labelled as msftdata).

workaround applied - HFS+ ESP is reformatted to FAT32 in post-scripts step and labelled as msftdata

  • efibootmgr write command freezes Mac (it's executed in Anaconda during Install bootloader... step) - nvram is blocked from writing

    • since macOS Catalina EFI is blocked even from reading, so access to EFI is blocked via adding efi=noruntime to kernel args
efibootmgr --c -w -L Fedora /d /dev/nvme0n1 -p 3 -l \EFI\fedora\shimx64.efi
  • ctrl+x is not working in GRUB, so if you are trying to change kernel parameters - start your OS by clicking ctrl+shift+f10 on external keyboard

Docs

Fedora

Github

Credits

  • @MCMrARM - thanks for all RE work
  • @ozbenh - thanks for submitting NVME patch
  • @roadrunner2 - thanks for SPI (touchbar) driver
  • @aunali1 - thanks for ArchLinux Kernel CI
  • @ppaulweber - thanks for keyboard and Macbook Air patches

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
shell (9,868
linux (2,349
apple (254
kernel (234
operating-system (166
os (111
system (97
fedora (67
iso (44
redhat (31
touchbar (30
anaconda (19
macbook (17

Find Open Source By Browsing 7,000 Topics Across 59 Categories