This install guide is a copy of this blog post with my own notes/thoughts along the way. The purpose of this is primarily to remind me of how I installed arch on my Macbook Pro Retina (Mid 2014).
WARNING: PLEASE MAKE SURE YOU KNOW EXACTLY WHAT EACH COMMAND DOES, ESPECIALLY THE DISK RELATED, THIS MAY ERASE YOUR IMPORTANT DATA PERMANENTLY! NO WARRANTY!
Update the Mac OSX and reboot, then run the Disk Utitlity to resize the Macintosh HD to 100GB, all the remaining space are reserved for Linux.
Prepare an Arch Linux USB disk:
- Download the iso https://www.archlinux.org/download/
- Copy it to your usb drive using dd
dd bs=512k if=archlinux.iso of=/dev/sdbYou can find your usb device (/dev/sdb) using
Reboot from USB by keep pressing the option key, and you will be prompted the zsh console from Arch Linux installer.
cgdisk /dev/sda to create partitions according to the following chart:
The installation of Arch Linux needs an active network connection, I’ve three simple choices to connect Internet.
- The USB Tether feature from my Android devices and iPhone 5. It just works.
- A Thunderbolt to gigabit Ethernet adapter, connect it before booting. Thunderbolt hotplugging is not supported.
- You might need to run
dhcpcd ens9. Use
iw devto find your ethernet device.
- You might need to run
- Use wireless network, it needs a working network to install the broadcom-wl-dkms. Then run wifi-menu to connect to WIFI. It works with great performance! There is more on this in configuration section of the install guide.
At first, encrypt my home partition with dm-crypt: NOTE: If you don’t wish to encrypt your home partition, skip this step.
cryptsetup -c aes-xts-plain64 -y -s 512 luksFormat /dev/sda7 cryptsetup luksOpen /dev/sda7 home
Format partitions and install the system.
mkfs.ext2 /dev/sda5 mkfs.ext4 /dev/sda6 mkfs.ext4 /dev/mapper/home # If your home partition is encrypted mkfs.ext4 /dev/sda7 # If your home partition is not encrypted mount /dev/sda6 /mnt mkdir /mnt/boot && mount /dev/sda5 /mnt/boot mkdir /mnt/home && mount /dev/mapper/home /mnt/home # Home partition encrypted mkdir /mnt/home && mount /dev/sda7 /mnt/home # Home partition not encrypted pacstrap /mnt base base-devel genfstab -p /mnt >> /mnt/etc/fstab echo 'home /dev/sda7' >> /mnt/etc/crypttab # Home partition encrypted
As the storage device is an SSD, so I tuned some parameters in
/dev/sda5 /boot ext2 defaults,relatime,stripe=4 0 2 /dev/sda6 / ext4 defaults,noatime,discard,data=writeback 0 1 # If your home drive is encrypted /dev/mapper/home /home ext4 defaults,noatime,discard,data=ordered 0 2 # If it is not /dev/sda7 /home ext4 defaults,noatime,discard,data=ordered 0 2
After everything is installed, do some basic configuration.
arch-chroot /mnt /bin/bash echo vecio > /etc/hostname # Replace vecio with your desired hostname hwclock --systohc --utc # Create username and password. Replace 'cedric' with your username. # You will be prompted for a password useradd -m -g users -G wheel -s /bin/bash cedric && passwd cedric pacman -S sudo # Uncomment this line to allow access to sudo: # %wheel ALL=(ALL) ALL nano /etc/sudoers
Set your local time. Replace
Asia/Hong_Kong with your
Zone/Region. You can view zones
ls /usr/share/zoneinfo/ and regions with
ln -s /usr/share/zoneinfo/Asia/Hong_Kong /etc/localtime
To set locale, edit
/etc/local.gen and uncomment the locales you want.
# Example en_US.UTF-8 UTF-8
Then generate the locales and set the LANG environment variable:
locale-gen echo LANG=en_US.UTF-8 > /etc/locale.conf export LANG=en_US.UTF-8
/etc/mkinitcpio.conf to insert
in the hooks section.
# Then mkinitcpio -p linux
I want to boot directly from MacBook’s EFI boot loader, so I just need to craft the boot.efi:
pacman -S grub
At this point, remember to alter /etc/default/grub with:
Now generate the boot.efi and place it somewhere such as a USB device:
# Create the boot.efi file. It will be placed in the current directory. grub-mkconfig -o boot/grub/grub.cfg grub-mkstandalone -o boot.efi -d usr/lib/grub/x86_64-efi -O x86_64-efi --compress=xz boot/grub/grub.cfg mkdir -p /mnt/usb # Create usb mount point mount /dev/sdb /mnt/usb # Mount the usb device cp boot.efi /mnt/usb # Copy boot.efi to usb umount /mnt/usb
Then exit chroot and umount all filesystems and reboot to Mac OSX again. Launch
Disk Utility to format (e.g. erase)
/dev/sda4 to HFS+ (Mac OS Extended Journaled),
it’s the place where grub2’s image will live in.
According to this article, create directories and files in
/dev/sda4 with the
|-- System | `-- Library | `-- CoreServices | |-- SystemVersion.plist | `-- boot.efi `-- mach_kernel
mach_kernel is a blank directory and
boot.efi is generated by
The contents of
<xml version="1.0" encoding="utf-8"?> <plist version="1.0"> <dict> <key>ProductBuildVersion</key> <string></string> <key>ProductName</key> <string>Linux</string> <key>ProductVersion</key> <string>Arch Linux</string> </dict> </plist>
After all files created, we need to
bless this partition to make it bootable by issuing
NOTE: To do this on OS X El Capitan and later, you will need to temporarily disable
System Integrity Protection.
Disable SIP (Skip this step if you are still on Yosemite or below)
- Restart the computer, while booting hold down Command-R to boot into recovery mode.
- Once booted, navigate to the “Utilities > Terminal” in the top menu bar.
csrutil disablein the terminal window and hit the return key.
- Restart the machine and System Integrity Protection will now be disabled.
After disabled, bless the partition
sudo bless --device disk0s4 --setBoot
Same Steps as disabling but enter
Your Arch Linux partition might be labeled
EFI Boot. There seems
to be a way to change this,
but I haven’t been able to get it to work.
You also might want to select which disk is the default startup disk. I think during this installation, Arch is made the default. You can specify which one you want by following these steps
Then Reboot to Arch Linux.
WM or DE
Install your preferred window manager or desktop environment. If you choose to use a window manager,
you can start it by adding the command to the end of your
yaourt -S xmonad xmonad-contrib cabal-install slim terminator \ xmobar dmenu-xft trayer scrot xscreensaver feh parcellite \ pidgin networkmanager-applet xfce4-notifyd gnome-keyring \ git nautilus ranger cabal update && cabal install yeganesh systemctl enable NetworkManager systemctl enable slim systemctl disable bluetooth # Because I never use it
Then I cloned vicfryzel’s xmonad config from https://github.com/vicfryzel/xmonad-config, and made several small tweaks.
Add the following lines to
~/.xinitrc to manage all the keys of the session,
e.g. SSH key passphrase, Wi-Fi password.
# Start a D-Bus session source /etc/X11/xinit/xinitrc.d/30-dbus # Start GNOME Keyring eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) # You probably need to do this too: export SSH_AUTH_SOCK export GPG_AGENT_INFO export GNOME_KEYRING_CONTROL export GNOME_KEYRING_PID
Also remember to remove the deperacted ck-launch-session from ~/.xinitrc, change to exec dbus-launch –sh-syntax –exit-with-session xmonad, this will fix the Trash and Network related problems in nautilus:
yaourt -S i3
exec i3 to the end of your
startx to begin
I have to admit it’s hard to find the theme and icons to work properly on a Retina screen. At last, I found Numix as the GTK theme, KDE’s oxygen as icons, and Vanilla DMZ as the cursor theme.
To change GTK’s theme, you can edit
or simply use
layout.css.devPixelsPerPx to 2, then everything in the
web will be retina ready, also recommend to install the FXChrome theme for Firefox.
If you’d prefer to use Google Chrome, install it with
yaourt google-chrome. In order for
it to look ok on retina screens, you might need to start it with this command:
Finally, the wallpaper is achieved by
feh --bg-fill -z ~/Pictures/Wallpapers