11 мая 2017

Сборка LineageOS под Gentoo на примере Sony Xperia M (C1905/nicki)

Необходимые ресурсы: RAM >8GB, HDD >100GB, ядер (kernel) чем больше тем лучше.

Предполагается, что у вас уже установлена Gentoo с профилем hardened/linux/amd64 или default/linux/amd64/13.0 (главное чтобы не nomultilib, нам нужны пакеты 32 и 64 битности одновременно). На удалённом хосте или в чруте на локальной машине. Компилить в основной системе не рекомендую, дабы не засорять её.

Перед компиляцией, необходимо поставить следующие пакеты, предварительно задав USE-флаги. Для этого создадим файл /etc/portage/package.use/my со следующим содержимым:
sys-libs/ncurses:0 tinfo abi_x86_32
sys-libs/ncurses:5 tinfo abi_x86_32
sys-libs/readline abi_x86_32
sys-libs/zlib abi_x86_32
app-arch/lz4 abi_x86_32
x11-libs/pango X
x11-libs/cairo X
dev-java/icedtea:8 headless-awt -alsa -cups -gtk

После, собственно ставим:
emerge -av dev-util/android-tools sys-devel/bc net-misc/curl dev-vcs/git media-gfx/imagemagick sys-libs/ncurses:0 sys-libs/ncurses:5 sys-libs/readline sys-libs/zlib app-arch/lz4 media-libs/libsdl x11-libs/wxGTK:3.0 x11-libs/pango x11-libs/cairo app-arch/lzop media-gfx/pngcrush sys-process/schedtool sys-fs/squashfs-tools app-arch/zip dev-java/icedtea:8


После установки, выберем необходимую версию JDK и питона:
eselect java-vm set system icedtea-8
eselect python set python2.7

Создадим пользователя android (имя без разницы) в системе и зайдём под ним:
useradd -m android
su android
cd ~

Создадим необходимые папки:
mkdir -p ~/bin
mkdir -p ~/android/lineage

Добавим в ~/.bashrc этого пользователя:
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Применим эти строки:
source ~/.bashrc

Скачаем и сделаем исполнимой утилиту для работы с исходниками от Google:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

Подготовим локальный реп:
cd ~/android/lineage
repo init --config-name -u https://github.com/LineageOS/android.git -b cm-14.1

Здесь вместо https://github.com/LineageOS/android.git можно использовать любой другой манифест для инициализации (например https://github.com/droncheg-los/sony-los.git). Через манифест удобно добавлять свои пакеты и производить тонкую настройку сборки.

Далее, собственно скачиваем все исходники объявленные в манифесте:
repo sync

После этой команды можно идти отдыхать, т.к. оно потянет порядка 50GB c интернета. Как докачается, продолжим:
source build/envsetup.sh
breakfast nicki

Оно ругнётся на отсутствие файлов для сборки нашего телефона. Для этого надо считать их с текущей прошивки. Надо запустить adb-демона на машине, к которой по USB подключен телефон с включенной отладкой (ADB):
а) если сервер далеко
adb start-server && ssh -R 5037:localhost:5037 <ip-адрес удалённой машины>
б) если сервер в chroot:
adb start-server

Вовзращаемся на билд систему и извлекаем нужные файлы:
cd ~/android/lineage/device/sony/nicki
./extract-files.sh

Собственно, собираем прошивку:
cd ~/android/lineage
breakfast nicki
croot

brunch nicki

Сборка процесс не быстрый и весьма ресурсоёмкий.
Итог будет лежать в android/lineage/out/target/product/nicki

Иногда, на некоторых типах процов, вываливается с ошибкой на pentium-m (или подобное) при попытке сборки kati - добрые разработчики Google решили компилировать с привязкой к процу, а не для всех. Надо всего лишь закоментировать строку #KATI_CXXFLAGS += -march=native в файле android/lineage/build/kati/Makefile.ckati

Также смотрите на настройки ядра (sysctl), в частности:
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
Отличные от этих могут приводить к нехватке памяти при сборке.

Полученная прошивка несовместима с официальной и должна ставится предварительно с полным вайпом. Основано на этом мануале. Финальный размер на диске, после сборки, всего lineageos - порядка 70GB.

Комментариев нет:

Отправить комментарий