§ Arch Linux на ARM ноутбуке. Часть 1: Установка.

Тут такое дело, попал мне в руки Samsung Chromebook Series 3 на базе ARM процессора Exynos 5 Dual. Железяка достойная, и всячески заслуживает похвалы. Хорошая клавиатура, очень вменяемая батарейка, неплохая производительность и вообще все дела. Насколько я знаю существует ещё один похожий Chromebook но только от HP. Разница у них в том что на HP стоит IPS матрица и заряжаться он может от обычного MicroUSB. В остальном с точки зрения железа буки идентичны. Но мне лично захотелось проверить а как собственно обстоят дела в мире Linux на архитектуре ARM, и вот я решил установить и настроить систему ArchLinuxARM на этом буке, а данную заметку пишу что бы не забыть вскоре как это было сделано.

Немного спойлеров: В следующий раз буду описывать настройку этого бука, что значительно более увлекательный процесс.

На самом деле на github уже есть установочные скрипты для HP Chromebook 11, которые должны делать все тоже самое и на Samsung, но без вмешательства человека. Однако я буду описывать процесс установки руками и с нуля, тем более что сразу скажу что скрипт этот я не пробовал.

Итак для начала проверим что у нас есть:

1. Samsung Chromebook Series 3 (XE303C12)

2. Флкшка на 4Gb или больше

3. Интренет

Если описывать в крупных деталях, то установка происходит следующим образом: мы разблокируем Developer Mode на буке, разрешаем загружаться с USB и с неподписанного ядра, ставим Linux на флешку, загружаемся с флешки и ставим Linux уже на сам бук. Звучит в принципе просто и понятно.

Почему Arch? На самом деле поддержку ARM заявляют порядка 5 серьёзных дистрибутивов, среди которых Ubuntu, Fedora, Gentoo, SuSE и Arch, но смотря правде в глаза Fedora, Ubuntu и SuSE очень ограниченны в имеющихся пакетах, а собирать из исходников на них не сильно удобно. Gentoo в этом смысле проще, но собирать абсолютно все из исходников да на достаточно простом ARM процессоре - это из области мазохизма. Вот и остаётся Arch, под который собрано достаточно пакетов, в том числе он позволяет ещё и собирать что нужно из AUR. Как раз то что нужно. Итак приступаем.

Сперва включаем Developer Mode на Chromebook, эта процедура стотыщьраз уже описана поэтому подробно я на ней останавливаться не буду. Будем считать что у вас уже этот режим включен, и вы можете нажав Ctrl+Alt+T получить окно с надписью chrosh> где если набрать shell появится приглашение bash. Собственно оттуда мы и начнём наше мытарство.

Сперва нам нужно получить root косноль и создать GPT разделы на нашей флешке.

$ sudo -i

crossystem dev_boot_usb=1 dev_boot_signed_only=0

# umount /dev/sda*

# fdisk /dev/sda

Тут мы разблокировали загрузку с USB и разрешили загружать неподписанные ядра. Данные настройки хранятся в специальной зарезервированной и защищённой от перезаписи области, поэтому не будут затёрты вместе с ChromeOS. Потенциально мы можем убрать блокирующий болт и перезаписать эти области памяти, но на практике это приносит больше проблем, а так же не является полностью обратимым. Установка ArchLinuxARM же является обратимой, и ChromeOS можно будет восстановить в дальнейшем с флешки восстановления, которую можно скачать из интернет.

Далее мы должны создать GPT разметку на нашем USB диске (внимание все данные с диска будут удалены!). Для этого в консоле fdisk мы нажимаем g что создаст нужную разметку, а затем  что сохранит изменения на диске. Теперь у нас на флешке разметка GPT. Ура!

# cgpt create /dev/sda

# cgpt add -i 1 -t kernel -b 8192 -s 32768 -l Kernel -S 1 -T 5 -P 10 /dev/sda

Вот тут уже начинается кое-что поинтереснее. Мы используем утилиту cgpt для создания разделов на флешке. Я думаю что раньше вам не приходилось встречаться с cgpt, и это потому что данная утилита была специально сделана компанией Google чтобы работать с разделами для Chromebook.

Итак мы создали первую партицию для ядра. Партиция эта должна начинаться с байта 8192, и обычно имеет размер в 16Mb, что достаточно для ядра. Начало в позиции 8192 на самом деле зашито в третий загрузчик u-boot (да, для загрузки ARM использует три загрузчика один за другим). Теперь нам нужно создать ещё один раздел, но для этого нам нужно проверить количество оставшегося места на диске

# cgpt show /dev/sda | grep "Sec GPT table"

30777311          32          Sec GPT table

В первой колонке мы видим цифру, которая нам потребуется в дальнейшем. Назовём её X.

# cgpt add -i 2 -t data -b 40960 -s `expr X - 40960` -l Root /dev/sda

Ну вот мы и создали ещё один раздел. Теперь нам нужно обновить таблицу разделов, что бы система увидела изменения. В ChromeOS для этого можно использовать 

# sfdisk -R /dev/sda

Теперь мы можем скачивать и устанавливать нашу систему на флешку.

# mkfs.ext4 /dev/sda2

# cd /tmp

# mkdir root

wget http://archlinuxarm.org/os/ArchLinuxARM-peach-latest.tar.gz

# mount /dev/sda2 root

# tar xf ./ArchLinuxARM-peach-latest.tar.gz -C root

# dd if=root/boot/vmlinux.kpart of=/dev/sda1

# cp ./ArchLinuxARM-peach-latest.tar.gz root/

# umount root

# sync

Вот щас немного поясню происходящее. Мы форматируем раздел /dev/sda2 как ext4 ибо это будет у нас корневой раздел нашей системы на флешке. Далее мы монтируем его в /tmp/root, и распаковываем туда скачанный из интернетов файл ArchLinuxARM-peach-latest.tar.gz. Тут кстати необходимо отметить один важный момент: по умолчанию в ChromeOS нет wget, поэтому вы можете скачать данную ссылку при помощи встроенного в ChromeOS браузера и скопировать этот файл в /tmp, либо поступить как хакер и установить в систему emerge и собрать wget с его помощью. Делается это достаточно просто ибо ChromeOS - это обычная Gentoo,

# dev_install

# emerge wget

Ладно, если с распаковкой рута всё более менее очевидно, то с dd необходимо пояснить. Так как это ARM то ядро у него поставляется в виде готового раздела, в котором уже упакованы конфигурационные файлы загрузчика, само ядро и бинарное дерево устройств (device tree binary). При желании мы можем все собрать руками, но в нашем случае это не требуется, ибо ядро со всеми необходимыми патчами уже поставляется в комплекте (ядро peach специально собрано для процессоров Exynos 5) и мы просто копируем этот образ в первый раздел нашей флешки.

После того как команда sync будет успешно завершена вы можете перезагружать ноутбук. Имейте в виду что у Samsung есть два порта USB, и к сожалению загрузка с флешки возможна только через USB2.0. Поэтому проверьте что флешка воткнута в черный порт а не синий.

На экране загрузки нам нужно нажать Ctrl+U после чего мы увидим как загружается наша система. Логин и пароль по умолчанию root/root. Итак теперь когда мы загрузились с флешки мы можем установить ArchLinuxARM на встроенный диск ноутбука. Но сперва мы должны подключить Arch к WiFi и установить несколько полезных утилит

# wifi-menu

# pacman -S parted vboot-utils

Parted содержит утилиту partprobe необходимую для того чтобы система перечитала разделы на дисках заново, а vboot-utils содержит cgpt от Google.

В принципе установка на внутненнюю флешку ничем не отличается от установки на USB за исключением того что USB определяется как /dev/sda а внутренний диск как /dev/mmcblk0 а партиции называются соответственно /dev/mmcblk0p1 и /dev/mmcblk0p2

В целом установка выглядит примерно вот так

# cgpt create /dev/mmcblk0

# cgpt add -i 1 -t kernel -b 8192 -s 32768 -l Kernel -S 1 -T 5 -P 10 /dev/mmcblk0

# cgpt show /dev/mmcblk0 | awk '/Sec GPT table/ {print $1}'

XXXX

# cgpt add -i 2 -t data -b 40960 -s `expr XXXX - 40960` -l Root /dev/mmblk0

# partprobe

# mkfs.ext4 /dev/mmcblk0p2

# cd /tmp

# mkdir root

# mount /dev/mmcblk0 root

# tar xf /ArchLinuxARM-peach-latest.tar.gz  -C root

# dd if=root/boot/vmlinux.kpart of=/dev/mmcblk0p1

# umount root

# sync

# reboot

Теперь можно отсоединять флешку и при следующей загрузке жать привычную комбинацию Ctrl+D после чего вы увидите загрузку ArchLinuxARM. Собственно на этом установка завершена. В следующиё раз я расскажу подробнее о настройке системы для работы со специфичным железом ноутбука


comments powered by Disqus