GithubHelp home page GithubHelp logo

arch-on-air's Introduction

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:

[128MB] Apple HFS+ “Boot Loader”
[256MB] Linux filesystem “Boot”
[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

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

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

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.UTF8 > /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

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:

arch-on-air's People

Contributors

dnohales avatar pandeiro avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.