• Stars
    star
    296
  • Rank 140,464 (Top 3 %)
  • Language
  • Created almost 11 years ago
  • Updated almost 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Step by step of setting up Arch Linux on a Macbook Air 2013

Arch on Air

Instructions for installing Arch Linux side-by-side with OS X on a Macbook Air 2013.

Most of this information was taken from these two sources:

Procedure

1. Make bootable USB media with Arch ISO image (wiki)

2. Hold the <alt/option> key and boot into USB

3. Create partitions

The following example assumes Arch will sit on a single partition; adjust according to preference.

It may also be possible to create a data partition that can be accessed from both OS X and GNU/Linux systems: how to do that properly is left as an exercise to the reader.

cgdisk /dev/sda

Partitions:

/dev/sda4 - [128MB] Apple HFS+ “Boot Loader”
/dev/sda5 - [256MB] Linux filesystem “Boot”
/dev/sda6 - [Rest of space] Linux filesystem “Root”

4. Format and mount partitions

mkfs.ext4 /dev/sda5
mkfs.ext4 /dev/sda6
mount /dev/sda6 /mnt
mkdir /mnt/boot && mount /dev/sda5 /mnt/boot

If you plan to use any memory-heavy applications (which includes most web browsers), it’s a good idea to create either a swap partition or a swapfile for system stability. Swapfiles are easier to resize or remove if you change your mind, so we’ll create a 512M one:

dd if=/dev/zero of=/mnt/swapfile bs=1M count=512
chmod 600 /mnt/swapfile
mkswap /mnt/swapfile

5. Installation

This requires an internet connection. Options:

pacstrap /mnt base base-devel
genfstab -U -p /mnt >> /mnt/etc/fstab

6. Optimize fstab for SSD, add swap

nano /mnt/etc/fstab
/dev/sda6 /     ext4 defaults,noatime,discard,data=writeback 0 1
/dev/sda5 /boot ext4 defaults,relatime,stripe=4              0 2
/swapfile none  swap defaults                                0 0

7. Configure system

arch-chroot /mnt /bin/bash
passwd
echo myhostname > /etc/hostname
ln -s /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
hwclock --systohc --utc
useradd -m -g users -G wheel -s /bin/bash myusername
passwd myusername
pacman -S sudo

8. Grant sudo

echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/10-grant-wheel-group

9. Set up locale

nano /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8

10. Set up mkinitcpio hooks and run

Insert “keyboard” after “autodetect” if it’s not already there.

nano /etc/mkinitcpio.conf

Then run it:

mkinitcpio -p linux

11. Set up GRUB/EFI

To boot up the computer we will continue to use Apple’s EFI bootloader, so we need GRUB-EFI:

pacman -S grub-efi-x86_64

Configuring GRUB

nano /etc/default/grub

Aside from setting the quiet and rootflags kernel parameters, a special parameter must be set to avoid system (CPU/IO) hangs related to ATA, as per this thread:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=data=writeback libata.force=1:noncq"

Additionally, the grub template is broken and requires this adjustment:

# fix broken grub.cfg gen
GRUB_DISABLE_SUBMENU=y
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

Copy boot.efi (generated in the command above) to a USB stick for use later in OS X.

12. Setup boot in OS X

Exit everything and reboot into OS X (by holding alt/option) and then choosing it.

exit # exit chroot
reboot

13. Launch Disk Utility in OS X

Format (“Erase”) /dev/sda4 using Mac journaled filesystem

14. Create boot file structure

This procedure allows the Apple bootloader to see our Arch Linux system and present it as the default boot option.

cd /Volumes/disk0s4
mkdir System mach_kernel
cd System
mkdir Library
cd Library
mkdir CoreServices
cd CoreServices
touch SystemVersion.plist
nano SystemVersion.plist
<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>

Copy boot.efi from your USB stick to this CoreServices directory. The tree should look like this:

|___mach_kernel
|___System
       |
       |___Library
              |
              |___CoreServices
                      |
                      |___SystemVersion.plist
                      |___boot.efi

15. Make Boot Loader partition bootable

sudo bless --device /dev/disk0s4 --setBoot

You may need to disable the System Integrity Projection of OS X:

  • 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.
  • Enter “csrutil disable” in the terminal window and hit the return key.
  • Restart the machine and System Integrity Protection will now be disabled.

Voila, Arch Linux is installed.

Reboot the computer and hold the alt/option key to select which operating system to boot.

16. Get wireless working in Arch

Get broadcom drivers

Download and install broadcom from AUR

(Make sure that b43 and ssb modules are not present in the output from `lsmod`)

modprobe wl
Alternatively, install broadcom-wl-dkms instead

…so that kernel updates don’t leave you without wifi. DKMS is a service that recompiles external modules after every kernel upgrade.

sudo pacman -S dkms
sudo systemctl enable dkms.service

Select network

sudo pacman -S dialog
sudo wifi-menu -o

17. Access common keys

Tilde key

The tilde key does not work on the keyboard out of the box. There are several solutions listed here but this one worked for me:

sudo nano /etc/modprobe.d/hid_apple.conf
options hid_apple iso_layout=0

Insert and <F1..12> keys

The <insert> key can be reproduced with fn+<Enter>. So to paste in an xterm window for instance, use S-fn-<Enter>.

F1-F12 require fn+<F1>, etc.

18. Improve battery performance

Out-of-the-box battery performance on Arch Linux should be good and at least comparable to OS X.

If you want to try to improve battery life, there are two recommended packages documented in the ArchWiki:

  • PowerTOP: a tool provided by Intel to enable various powersaving modes in userspace, kernel and hardware, available in the official repositories. (ArchWiki)
  • TLP: a collection of power-saving scripts available in the official repositories. (ArchWiki)

Additional Links

There are other folks who have blogged about this process since I started this:

More Repositories

1

boot-http

A simple HTTP serve task for the Boot build tool
Clojure
61
star
2

agua

Utilities for writing simple webapps
Clojure
34
star
3

jaki

A simple ClojureScript CouchDB client
Clojure
16
star
4

ghost

A ClojureScript wrapper for CasperJS
Clojure
15
star
5

docker-lein

A Docker image containing the Leiningen project tool
12
star
6

livid-mode

A mode for instant JavaScript eval in Emacs
Emacs Lisp
10
star
7

jamal

A minimal ClojureScript sample application using Boot
Clojure
10
star
8

claudio

Read and write MP3 ID3 tags with Clojure
Clojure
8
star
9

casper-cljs

A leiningen template for creating new Ghost/CasperJS projects
Clojure
5
star
10

dotemacs

my emacs.d
Emacs Lisp
5
star
11

dog

A Leiningen template for generating single-page-applications with ClojureScript
Clojure
5
star
12

bootcamp

Sample Boot application
Clojure
5
star
13

boot-test-cljs

A ClojureScript testing task for Boot
Clojure
3
star
14

async-watch

A filesystem watcher using Clojure-Watch and Core.async
Clojure
3
star
15

multiedit

A simple text editor for note-taking from the browser
Clojure
3
star
16

impressive

Simplify writing impress.js presentations with Clojure/hiccup
Clojure
2
star
17

docker-vnc-intellij

Dockerfile for creating an image with X, VNC, Java and Intellij
2
star
18

phantomjs-localstorage-check

PhantomJS with localStorage test
JavaScript
1
star
19

garden-compiler-warnings

Shows CLJS compiler warnings when using garden
Clojure
1
star
20

clojurescript-test-localhost-issue

Simple case showing breakage with clojurescript.test, phantomjs and localStorage
Clojure
1
star
21

docker-oracle-jdk8

Dockerfile to build a Debian image with Oracle JDK8 installed
1
star
22

guppy

HTML5 note-taking app
Clojure
1
star
23

set.js

Simple implementation of sets using JavaScript Arrays
JavaScript
1
star
24

chess

A chessboard implemented in AngularJS
JavaScript
1
star
25

docker-jsc

Docker image for JavaScriptCore
1
star
26

docker-boot

A Docker image with Boot
1
star
27

cljs-test-issue

Simple repro of stale test output issue
Clojure
1
star
28

hello-ocaml

Explorations of the OCaml programming language
1
star
29

cirque

just a sample cljs repo
Clojure
1
star
30

devrandom

Clojure
1
star
31

hello-re-frame

A basic re-frame application
Clojure
1
star
32

hello-rust

Explorations of the Rust programming language
Rust
1
star
33

sample-cljs-node-app

Clojure
1
star
34

tictactoe

Yes, I implemented an HTML5 tictactoe for my toddler
JavaScript
1
star
35

docker-opensis

A Docker image for OpenSIS
Shell
1
star
36

writ

A set of scripts to facilitate pushing content from Emacs to CouchDB
Shell
1
star
37

boot-http-bug

reproduction of boot-http issue
Clojure
1
star