Arch Linux en el MacBook

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
- http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- https://wiki.archlinux.org/index.php/Xdg_user_directories
- https://wiki.archlinux.org/index.php/XDG_Base_Directory_support
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
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
- http://blog.juliobs.com/instalacao-do-arch-linux/
- http://architectlinux.boardhost.com/index.php
- http://bmccarthy.net/2014/08/02/touchegg-on-archlinux/
- http://dabase.com/blog/Macbook_Air_Early_2014_Archlinux/
- http://loicpefferkorn.net/2015/01/arch-linux-on-macbook-pro-retina-2014-with-dm-crypt-lvm-and-suspend-to-disk/
- http://ryangehrig.com/index.php/arch-linux-on-macbook-air-2013/
- http://www.frankshin.com/installing-archlinux-on-macbook-air-2013/
- http://www.frankshin.com/macbook-air-62-2013-setting-it-up-with-archlinux/
- http://www.linuxveda.com/2015/04/20/arch-linux-tutorial-manual/
- http://www.rodsbooks.com/refind/
- https://bbs.archlinux.org/viewtopic.php?id=150276
- https://bbs.archlinux.org/viewtopic.php?id=165854
- https://bbs.archlinux.org/viewtopic.php?id=165899
- https://bbs.archlinux.org/viewtopic.php?id=171883
- https://code.google.com/p/touchegg/issues/detail?id=178
- https://code.google.com/p/touchegg/issues/detail?id=203
- https://github.com/BlueDragonX/xf86-input-mtrack
- https://help.ubuntu.com/community/MacBookAir6-2/Trusty
- https://news.ycombinator.com/item?id=8904213
- https://wiki.archlinux.org/index.php/Apple_Keyboard
- https://wiki.archlinux.org/index.php/Beginners'_guide
- https://wiki.archlinux.org/index.php/ICC_Profiles
- https://wiki.archlinux.org/index.php/Installation_guide
- https://wiki.archlinux.org/index.php/MacBook
- https://wiki.archlinux.org/index.php/MacBookPro11,x
- https://wiki.archlinux.org/index.php/Touchegg
- https://www.reddit.com/r/linux/comments/2srkva/arch_linux_on_macbook_pro_retina_2014_with/
- https://kroweer.wordpress.com/2011/09/07/creating-a-custom-arch-linux-live-usb/
- http://works13.com/blog/mac/the-best-way-of-running-arch-linux-on-a-mac.htm
- https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
- https://wiki.archlinux.org/index.php/Neovim
- https://support.apple.com/en-us/HT201255
- https://help.ubuntu.com/community/Byobu