Arch Linux en el MacBook

may. 1, 2016·
Julio Batista Silva
Julio Batista Silva
· 9 min de lectura
Atención: escribo todos los tutoriales para mí mismo, de acuerdo con mis preferencias y

necesidades. No sigas este “tutorial” ciegamente ni ejecutes ningún comando sin saber exactamente qué hace.

Hice esta instalación en 2014 y la estoy publicando aquí a pedido de un miembro del grupo Arch Linux Brasil en Facebook. El proceso es muy parecido al detallado en mi tutorial de 2012, pero el MacBook requiere una atención especial. El artículo está un poco incompleto y probablemente no lo edite pronto.

Ya no uso esta configuración en dual boot, porque el resultado no me pareció muy satisfactorio; el Wi‑Fi a veces fallaba, el touchpad no funciona tan bien como en OS X (incluso llegué a editar el código fuente de los drivers en vano), la batería duraba menos y ocupaba mucho espacio de mi SSD de solo 128 GB.

Ahora tengo un desktop con Arch, un disco externo con varios Live CDs y algunas máquinas virtuales en OS X. Hasta ahora esa configuración me ha servido para todo lo que necesito.

¿Por qué un MacBook?

Mi Acer, que ya estaba viejito y lento, tuvo otro problema en la pantalla, así que decidí que era hora de cambiar de portátil.

Todavía vivía en Alemania y encontré un MacBook Air 13" subastándose en eBay. Hice una oferta relativamente baja y aun así lo conseguí. El teclado es alemán, pero fue fácil acostumbrarse.

A pesar de que a veces critico los productos de Apple, tengo que reconocer que la calidad del hardware es excelente, así como su valor de reventa. También existe la posibilidad de desarrollar para iOS.

En términos de software, OS X no decepciona. Desde que lo compré, usé Mavericks, Yosemite y El Capitan sin problemas. Muchos proyectos FOSS también están disponibles, pues Darwin es Unix‑like (¡y POSIX!).

Copia de seguridad y actualización de OS X

Para reducir el riesgo de problemas, haz copia de seguridad de tus archivos, libera espacio en disco y actualiza OS X.

Particionado del disco

Divide Macintosh HD en dos particiones utilizando Disk Utility. Usé solo 23 GB para Arch, porque el SSD del MacBook tiene apenas 128 GB.

Arch por USB

Descarga la última versión de Arch en https://www.archlinux.org/download/ y graba el .iso en un pendrive:

sudo dd if=archlinux-2014.10.01-dual.iso of=/dev/rdisk2 bs=1m

Gestor de arranque UEFI

Desde el kernel 3.3, es posible iniciar Linux sin usar bootloaders como GRUB gracias a EFISTUB.

Solo necesitamos un boot manager para seleccionar los diferentes sistemas operativos.

Systemd-boot

Antes llamado gummiboot, es el gestor más simple y con menos recursos. No lo usaré.

rEFInd

rEFInd es un fork de rEFIt. Básicamente muestra un menú durante el arranque que te permite elegir el sistema operativo a iniciar.

En El Capitan, es necesario ejecutar csrutil disable en Recovery Mode antes.

Descarga la última versión disponible en el sitio e instala con las siguientes opciones:

sudo ./install.sh --alldrivers

Lo estoy instalando en la ESP, pues utilizo Whole‑Disk Encryption en OS X.

diskutil list
mkdir /Volumes/ESP
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP

Renombra la carpeta y el archivo .efi si tienes un retardo de 30 s durante el arranque:

# mv /Volumes/ESP/EFI/refind /Volumes/ESP/EFI/BOOT
# mv /Volumes/ESP/EFI/BOOT/refind_x64.efi /Volumes/ESP/EFI/BOOT/bootx64.efi

Añade la siguiente línea en refind.conf:

dont_scan_volumes ""

(Esa línea está comentada como #dont_scan_volumes "Recovery HD").

Instalación

Conecta el pendrive a un puerto USB y reinicia el ordenador. Uno de los iconos en rEFInd debería iniciar desde el pendrive. Aquí aparece Boot Legacy OS from FAT volume.

El Wi‑Fi no funcionará, así que ten un adaptador USB‑Ethernet o coloca el driver broadcom-wl-dkms en el pendrive.

Sigue la instalación normalmente, pero no instales ningún bootloader. Mi instalación, con un disco cifrado, es más o menos así:

loadkeys i386/qwertz/de-latin1.map.gz             # ou br-abnt2
timedatectl set-ntp true
fdisk -l /dev/sda                                 # ou lsblk
cryptsetup benchmark
cryptsetup -v --cipher aes-xts-plain64 --key-size 256 --hash sha1 --iter-time 1000 --use-urandom --verifiy-passphrase luksFormat /dev/sda4
cryptsetup luksDump /dev/sda4
cryptsetup luksOpen /dev/sda4 arch-luks
mkfs.ext4 -L arch /dev/mapper/arch-luks

Si quieres una swap:

mkswap -L swap /dev/sdXY && swapon /dev/sdXY
mount /dev/mapper/arch-luks /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot
pacstrap /mnt base{,-devel}
genfstab -U -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt
echo "air" > /etc/hostname
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
sed -i -e 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/#pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo -e "KEYMAP=de-latin1\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
sed -i -e '/^#\[multilib\]$/,+1s/#//' /etc/pacman.conf
sed -i -e '/# Misc options/a ILoveCandy' /etc/pacman.conf
sed -i -e 's/^# Color/Color/' /etc/pacman.conf
pacman -Sy reflector
reflector --verbose -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist
$ vi /etc/mkinitcpio.conf
    HOOKS="base udev autodetect modconf block encrypt filesystems keyboard keymap consolefont fsck"
mkinitcpio -p linux
passwd
pacman -S \
    sudo zsh alsa-utils alsa-oss xbindkeys feh imagemagick wget \
    firefox htop python python2 python-pip python2-pip git ack openssh \
    apache postgresql rsync rxvt-unicode unrar zip p7zip gparted ntfsprogs \
    neovim python{,2}-neovim renameutils \
    mpd ncmpcpp xf86-video-vesa
# pacman -S pkgfile
# pkgfile --update
$ echo "source /usr/share/doc/pkgfile/command-not-found.zsh" >> ~/.zshrc
# amixer sset Master unmute
# amixer sset Master 50%
# speaker-test -c 2

Directorios de usuario XDG

Varios programas usan directorios y variables de entorno por defecto. Los siguientes comandos crean estos directorios:

$ sudo pacman -S xdg-user-dirs
$ nvim ~/.config/user-dirs.dirs
    XDG_CACHE_HOME="${HOME}/.cache
    XDG_CONFIG_HOME="${HOME}/.config
    XDG_DATA_HOME="${HOME}/.config
$ sudo -e /etc/xdg/user-dirs.conf
    Enabled = False
xdg-user-dirs-update

Lo que hago es poner estas variables en /etc/profile y ~/.profile.

Packer

sudo pacman -S jshon expac
wget https://aur.archlinux.org/cgit/aur.git/snapshot/packer.tar.gz
tar xvzf packer.tar.gz && cd packer && makepkg
sudo pacman -U packer-20150808-1-any.pkg.tar.xz
rm -rf ~/packer

Byobu

packer byobu
byobu-enable
echo 'set -g default-terminal "screen-256color"' >> ~/.byobu/profile.tmux

SSH

$ sudo -e /etc/ssh/sshd_config
    Edite o arquivo para melhorar a segurança
sudo systemctl enable sshd.socket --now
ssh-keygen -t rsa -b 4096 -f ~/.ssh/servidorx -C "pubkey para servidor X"
ssh-copy-id -i ~/.ssh/servidorx.pub '-p 2345 usuario@servidorx'
chmod 700 ~/.ssh && chmod 600 ~/.ssh/servidorx && chmod 400 ~/.ssh/authorized_keys
$ nvim ~/.ssh/config
    Host servidorx
        HostName        ssh.servidorx
        IdentityFile    ~/.ssh/servidorx
        User            usuario
        Port            2345

rEFInd.conf

$ vim /boot/EFI/refind/refind.conf
menuentry Arch {
    icon EFI/refind/icons/os_arch.png
    loader vmlinuz-linux
    initrd initramfs-linux.img
    options "cryptdevice=/dev/sda4 rw root=/dev/mapper/arch-luks"
}

Internet

Sin ningún gestor

Cable

Para conectarte una sola vez a la red por DHCP:

dhcpcd enp0s20u1

Wi‑Fi

Driver: https://aur.archlinux.org/packages/broadcom-wl/.

El driver broadcom-wl-dkms también funciona bien.

sudo pacman -S wpa_supplicant
packer broadcom-wl
sudo wifi-menu wlp3s0

Networkd

Configuración estática. No se recomienda para portátiles, sino para servidores y desktops que se conectan siempre a las mismas redes.

> nvim /etc/systemd/network/enp2s2.network
[Match]
Name=enp2s2
[Network]
DHCP=yes
systemctl enable systemd-resolved --now
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl enable systemd-networkd --now

También existe Netctl.

Grupos de usuarios y activación de sudo

useradd -m -g users -G wheel -s /bin/zsh julio ### Talvez audio también
passwd julio
EDITOR=nvim visudo

Descomenta la línea %wheel ALL=(ALL) ALL

Retroiluminación

echo "255" > /sys/class/leds/smc\:\:kbd_backlight/brightness

o

cp /sys/class/leds/smc\:\:kbd_backlight/max_brightness /sys/class/leds/smc\:\:kbd_backlight/brightness

Audio

Añade tu usuario al grupo audio: $ sudo gpasswd -a julio audio.

Inicia Pulseaudio: $ pulseaudio --start.

Controla las salidas con pavucontrol.

Activa la ejecución simultánea con paprefs.

Vídeo

Driver de vídeo: xf86-video-intel.

Añade tu usuario al grupo video: $ sudo gpasswd -a julio video.

X11

Teclado alemán y desplazamiento natural con el touchpad

setxkbmap -layout de -model macbook79 -option caps:swapescape
$ cat ~/.Xmodmap
keycode  54 = c C c C ccedilla Ccedilla
keycode  57 = n N n N dead_tilde N dead_tilde

!Natural Scrolling
pointer = 1 2 3 5 4 7 6 8 9 10 11 12 13 14 15

Añade keyboard a HOOKS después de autodetect en /etc/mkinitcpio.conf.

Touchpad

Añade tu usuario al grupo input: $ sudo gpasswd -a julio input.

Probé varios drivers y configuraciones diferentes. Lamentablemente ninguna opción funciona tan bien como en OS X.

xf86-input-synaptics-mtpatch

Edita el archivo /etc/X11/xorg.conf.d/10-synaptics.conf:

Section "InputClass"
    Identifier "touchpad_catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    Option "LeftEdge" "-3611"
    Option "RightEdge" "4246"
    Option "TopEdge" "517"
    Option "BottomEdge" "6108"
    Option "FingerLow" "25"
    Option "FingerHigh" "75"
    Option "FingerPress" "257"
    Option "MaxTapTime" "180"
    Option "MaxTapMove" "511"
    Option "MaxDoubleTapTime" "180"
    Option "SingleTapTimeout" "180"
    Option "ClickTime" "100"
    Option "FastTaps" "0"
    Option "EmulateMidButtonTime" "0"
    Option "EmulateTwoFingerMinZ" "283"
    Option "EmulateTwoFingerMinW" "7"
    Option "VertScrollDelta" "-220"
    Option "HorizScrollDelta" "-220"
    Option "VertEdgeScroll" "0"
    Option "HorizEdgeScroll" "0"
    Option "CornerCoasting" "0"
    Option "VertTwoFingerScroll" "1"
    Option "HorizTwoFingerScroll" "1"
    Option "MinSpeed" "1.03333"
    Option "MaxSpeed" "1.4"
    Option "AccelFactor" "0.017"
    Option "TrackstickSpeed" "40"
    Option "EdgeMotionMinZ" "30"
    Option "EdgeMotionMaxZ" "160"
    Option "EdgeMotionMinSpeed" "1"
    Option "EdgeMotionMaxSpeed" "929"
    Option "EdgeMotionUseAlways" "0"
    Option "TouchpadOff" "0"
    Option "LockedDrags" "0"
    Option "LockedDragTimeout" "5000"
    Option "RTCornerButton" "0"
    Option "RBCornerButton" "0"
    Option "LTCornerButton" "0"
    Option "LBCornerButton" "0"
    Option "TapButton1" "1"
    Option "TapButton2" "3"
    Option "TapButton3" "2"
    Option "ClickFinger1" "1"
    Option "ClickFinger2" "3"
    Option "ClickFinger3" "0"
    Option "CircularScrolling" "0"
    Option "CircScrollDelta" "0.1"
    Option "CircScrollTrigger" "0"
    Option "CircularPad" "0"
    Option "PalmDetect" "1"
    Option "PalmMinWidth" "9"
    Option "PalmMinZ" "180"
    Option "CoastingSpeed" "20"
    Option "CoastingFriction" "50"
    Option "PressureMotionMinZ" "30"
    Option "PressureMotionMaxZ" "160"
    Option "PressureMotionMinFactor" "1"
    Option "PressureMotionMaxFactor" "1"
    Option "GrabEventDevice" "1"
    Option "TapAndDragGesture" "1"
    Option "AreaLeftEdge" "0"
    Option "AreaRightEdge" "0"
    Option "AreaTopEdge" "0"
    Option "AreaBottomEdge" "0"
    Option "HorizHysteresis" "5"
    Option "VertHysteresis" "3"
    Option "ClickPad" "1"
    Option "RightButtonAreaLeft" "0"
    Option "RightButtonAreaRight" "0"
    Option "RightButtonAreaTop" "0"
    Option "RightButtonAreaBottom" "0"
    Option "MiddleButtonAreaLeft" "0"
    Option "MiddleButtonAreaRight" "0"
    Option "MiddleButtonAreaTop" "0"
    Option "MiddleButtonAreaBottom" "0"
    Option "SHMConfig" "on"
EndSection

xf86-input-mtrack-git

Configuración: /etc/X11/xorg.conf.d/10-mtrack.conf

Section "InputClass"
    MatchIsTouchpad "on"
    Identifier      "Touchpads"
    Driver          "mtrack"
    Option          "TrackpadDisable" "0"
    Option          "Sensitivity" "0.5"
    Option          "FingerHigh" "5"
    Option          "FingerLow" "1"
    Option          "IgnoreThumb" "true"
    Option          "IgnorePalm" "true"
    Option          "DisableOnThumb" "false"
    Option          "DisableOnPalm" "false"
    Option          "BottomEdge" "25"
    Option          "ButtonIntegrated" "true"
    Option          "ButtonMoveEmulate" "false"
    Option          "ClickFinger1" "1"
    Option          "ClickFinger2" "2"
    Option          "ClickFinger3" "3"
    Option          "TapButton1" "1"
    Option          "TapButton2" "3"
    Option          "TapButton3" "2"
    Option          "TapButton4" "0"
    Option          "ClickTime" "25"
    Option          "ScrollDistance" "75"
    Option          "SwipeUpButton" "8"
    Option          "SwipeDownButton" "9"
    Option          "SwipeLeftButton" "8"
    Option          "SwipeRightButton" "9"
EndSection

Gestos con Touchégg

Instala touchegg disponible en el AUR: $ packer touchegg.

Copia el archivo de configuración:

cp -r /usr/share/touchegg/ ~/.config

Edítalo manualmente:

vim ~/.config/touchegg/touchegg.conf

O con la GUI disponible en el AUR.

xSwipe

La wiki también sugirió xSwipe, pero no conseguí hacerlo funcionar. Pide activar SHMConfig, pero creo que eso está deprecado.

Desactivar el touchpad mientras escribes

Añade syndaemon -t -k -i 2 & a ~/.xinitrc.

Webcam

iSight.

Descubrir versión del Mac:

$ sudo dmidecode -s system-product-name
MacBookAir6,2

Suspender, reanudar e hibernar

Hibernar

Añade resume a HOOKS en /etc/mkinitcpio.conf:

HOOKS="base udev autodetect modconf block resume filesystems keyboard fsck"

Ejecuta mkinitcpio: # mkinitcpio -p linux

Calibrar los colores del monitor

Guarda los ICC Profiles de OS X en algún lugar accesible desde Linux:

cp -r /Library/ColorSync/Profiles /Volumes/Externo

Instala xcalib disponible en AUR:

packer xcalib

Copia los ICC Profiles a /usr/share/color/icc, /usr/local/share/color/icc o /home/USER_NAME/.color/icc:

sudo cp -r /mnt/externo/Profiles /usr/share/color/icc/Profiles_Mac

Prueba la nueva configuración con el siguiente comando:

xcalib -d :0 /usr/share/color/icc/Profiles_Mac/Displays/Color\ LCD-933C106C-08BC-09AA-F750-C2A74A119DEF.icc

Si quedó bien, añade el comando a .xinitrc.

Seguridad

Añadir contraseña de firmware

Desactivar login por ssh como root

Edita el archivo sshd_config: $ sudo vim /etc/ssh/sshd_config PermitRootLogin no

Si quieres Grub

pacman -S grub os-prober
grub-install --recheck --debug /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Crypttab

$ /etc/crypttab
backup UUID=d85e844d-2233-45b1-baff-a4fa32a50d6c none luks,noauto,quiet

mpdscribble

packer mpdscribble
mkdir ~/mpdscribble
cp /usr/share/mpdscribble/mpdscribble.conf.example .mpdscribble/mpdscribble.conf
nvim .mpdscribble/mpdscribble.conf

Enlaces

Julio Batista Silva
Autores
Senior Cloud Developer
comments powered by Disqus