Instalace CarbonROM na Nexus 4 (Mako)
CarbonROM je alternativní (aftermarket) operační systém pro chytré telefony postavený na Androidu podobně jako třeba LineageOS. Zatím co LineageOS už telefon Nexus 4 od cca půlky roku 2019 nepodporuje, CarbonOS podporu má a poslední dostupná verze je jen pár týdnů stará, ta poskytuje Android 9 s “úrovní opravy zabezpečení Android” 5. prosince 2019 (dnes je 7. ledna 2020) což je pro téměř 8 let starý telefon super.
Protože LineageOS který jsem měl na Nexusu doteď už aktualizaci nejspíš nedostane a protože Nexus už dávno není můj primární telefon, rozhodl jsem se dát šanci oné CarbonROM na kterou jsem nedávno náhodou narazil.
Protože CarbonROM nemá na stránkách instalační instrukce (alespoň v současnosti), rozhodl jsem se napsat tento zápisek s poznámkami a seznamem příkazů, které jsem při instalaci použil.
Rychlé odkazy:
- TWRP pro Nexus 4 (Mako) – TWRP je alternativní recovery pro Androidí telefony. Je to minimalistický systém, který jde použít pro záchranu systému/dat (jak název recovery napovídá), tak pro instalaci alternativní ROM.
- CarbonROM image pro Nexus 4 (Mako) – Obraz operačního systému CarbonROM, který pomocí TWRP do telefonu za chvíli nainstalujeme.
- Open GApps – Google aplikace. Pokud chcete v CarbonROM používat google služby (obchod play, kalendár, email, geolokace, atd.) instalujte. Pro Nexus 4 budete potřebovat ARM verzi (nikoli ARM64) ve velikosti “micro” (větší se nevejde).
- Instalační instrukce pro LineageOS na Nexus 4 (Mako) – I když projekt LineageOS už nové verze pro Mako neposkytuje, návod je pořád aktuální a jediný rozdíl je, že místo LineageOS obrazu do telefonu nainstalujeme CarbonOS.
- Návod na zvětšení systémového oddílu u Nexusu 4 z xda-developers v příspěvku od uživatele bmg1001. – Do systémového oddílu výchozí velikosti na Nexus 4 se CarbonROM bohužel nevejde.
Upozornění
Toto není vyčerpávající návod! Kroky co se dělají v grafickém rozhraní TWRP přímo na telefonu tu většinou nezmiňuji, některé další zase nerozebírám. Primárně doporučuji přečíst zmíněný návod na LineageOS wiki. Tato série příkazu co tu uvádím je spíš reference pro mě.
Prerekvizity
- Odemčený bootloader na telefonu (pokud ještě nemáte mrkněte na návod na stránkách LineageOS).
- USB kabel pro propojení telefonu s počítačem.
- Nainstalovaný nástroj ADB (Android Debug Bridge) na počítači – Ve Fedoře poskytovaný balíčkem “android-tools”.
- Mít na telefonu aktivované “vývojářské možnosti” (Nastavení -> O zařízení a tam 7x stisknout na “Číslo sestavení”) a v nich zapnuté “ladění přes USB”.
Připojení telefonu k systému
$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
0172afa28a94ad60 no permissions; see [http://developer.android.com/tools/device.html
Onu “no permissions” chybu vyřešilo restartování adb serveru:
$ sudo adb kill-server
$ sudo adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully
$ adb devices
List of devices attached
0172afa28a94ad60 unauthorized
Stav “unauthorized” vyřešilo autorizování připojeného počítače přímo na telefonu (Android vyhodil notifikaci, kde se zeptal jestli chci autorizovat nebo ne).
$ adb devices
List of devices attached
0172afa28a94ad60 device
Hotovo, adb už telefon vidí.
Restart telefonu do fastbootu kvůli instalaci TWRP
$ adb reboot bootloader
$ fastboot devices
no permissions; see [http://developer.android.com/tools/device.html] fastboot
“no permissions” vyřešilo použití sudo:
$ sudo fastboot devices
0172afa28a94ad60 fastboot
Nyní je potřeba nainstalovat TWRP, které jsme stáhli z výše zmíněného odkazu:
$ sudo fastboot flash recovery twrp-3.3.1-0-mako.img
Sending 'recovery' (9376 KB) OKAY [ 0.299s]
Writing 'recovery' OKAY [ 0.503s]
Finished. Total time: 0.805s
A pak restartovat telefon do onoho TWRP recovery jež jsme právě nainstalovali:
$ sudo fastboot boot twrp-3.3.1-0-mako.img
Downloading 'boot.img' OKAY [ 0.310s]
booting OKAY [ 0.027s]
Finished. Total time: 0.346s
Zvětšení systémového oddílu
POZOR: Tato část je víc technická a bylo by dobré aby jste rozuměli tomu co děláte, jinak riskujete, že si rozbijete souborový systém v telefonu!
Celý návod na xda-developers v příspěvku od uživatele bmg1001.
$ adb push parted /
parted: 1 file pushed. 3.2 MB/s (346680 bytes in 0.102s)
Tímto příkazem zkopírujeme binárku nástroje “parted”, který jsme stáhli ze zmíněného příspěvku na xda-developers, do kořene souborového systému na vašem telefonu. Teď některé oddíly odpojíme, odstraníme, a vytvoříme znovu s upravenými velikostmi (vetší systémový oddíl na úkor oddílu pro cache):
$ adb shell
~ # chmod +x parted
~ # ./parted /dev/block/mmcblk0 p
Model: MMC 016G92 (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 524kB 67.6MB 67.1MB fat16 modem
2 67.6MB 68.2MB 524kB sbl1
3 68.2MB 68.7MB 524kB sbl2
4 68.7MB 70.8MB 2097kB sbl3
5 70.8MB 71.3MB 524kB tz
6 71.3MB 94.4MB 23.1MB boot
7 94.4MB 117MB 23.1MB recovery
8 117MB 118MB 799kB m9kefs1
9 118MB 119MB 799kB m9kefs2
10 119MB 120MB 799kB m9kefs3
11 120MB 121MB 524kB rpm
12 121MB 121MB 524kB aboot
13 121MB 122MB 524kB sbl2b
14 122MB 124MB 2097kB sbl3b
15 124MB 124MB 524kB abootb
16 124MB 125MB 524kB rpmb
17 125MB 125MB 524kB tzb
18 125MB 126MB 524kB metadata
19 126MB 143MB 16.8MB misc
20 143MB 159MB 16.8MB ext4 persist
21 159MB 1040MB 881MB ext4 system
22 1040MB 1627MB 587MB ext4 cache
23 1627MB 15.8GB 14.1GB ext4 userdata
24 15.8GB 15.8GB 524kB DDR
25 15.8GB 15.8GB 507kB grow
~ # umount /data
~ # umount /sdcard
~ # umount /cache
~ # umount /system
~ # ./parted /dev/block/mmcblk0 rm 21
Information: You may need to update /etc/fstab.
~ # ./parted /dev/block/mmcblk0 rm 22
Information: You may need to update /etc/fstab.
~ # ./parted /dev/block/mmcblk0 mkpart primary 159 1590
Information: You may need to update /etc/fstab.
~ # ./parted /dev/block/mmcblk0 mkpart primary 1590 1627
Information: You may need to update /etc/fstab.
~ # ./parted /dev/block/mmcblk0 p
Model: MMC 016G92 (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 524kB 67.6MB 67.1MB fat16 modem
2 67.6MB 68.2MB 524kB sbl1
3 68.2MB 68.7MB 524kB sbl2
4 68.7MB 70.8MB 2097kB sbl3
5 70.8MB 71.3MB 524kB tz
6 71.3MB 94.4MB 23.1MB boot
7 94.4MB 117MB 23.1MB recovery
8 117MB 118MB 799kB m9kefs1
9 118MB 119MB 799kB m9kefs2
10 119MB 120MB 799kB m9kefs3
11 120MB 121MB 524kB rpm
12 121MB 121MB 524kB aboot
13 121MB 122MB 524kB sbl2b
14 122MB 124MB 2097kB sbl3b
15 124MB 124MB 524kB abootb
16 124MB 125MB 524kB rpmb
17 125MB 125MB 524kB tzb
18 125MB 126MB 524kB metadata
19 126MB 143MB 16.8MB misc
20 143MB 159MB 16.8MB ext4 persist
21 159MB 1590MB 1431MB ext4
22 1590MB 1627MB 37.4MB
23 1627MB 15.8GB 14.1GB ext4 userdata
24 15.8GB 15.8GB 524kB DDR
25 15.8GB 15.8GB 507kB grow
~ # ./parted /dev/block/mmcblk0 name 21 system
~ # ./parted /dev/block/mmcblk0 name 22 cache
~ # mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p21
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
87472 inodes, 349271 blocks
17463 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=360710144
11 block groups
32768 blocks per group, 32768 fragments per group
7952 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
~ # mke2fs -b 4096 -T ext4 /dev/block/mmcblk0p22
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2288 inodes, 9128 blocks
456 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=12582912
1 block group
32768 blocks per group, 32768 fragments per group
2288 inodes per group
Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
~ # mount -a
Instalace CarbonROM a GApps
Nyní uděláme wipe (smazání) a formátování v TWRP grafickém uživatelském rozhraní přímo na telefonu tak jak popisuje návod na LineageOS wiki a pak nainstalujeme CarbonROM obraz a GApps, které jsme stáhli ze stránek co jsem odkázal výše.
$ sudo adb sideload CARBON-CR-7.0-OPAL-RELEASE-mako-20191220-0303.zip
$ sudo adb sideload open_gapps-arm-9.0-micro-20200107.zip
Hotovo!
Poznámka na závěr, pokud se vám instalace nedaří kvůli nedostatku místa ani po tom co jste zvětšili systémový oddíl, můžete ještě zkusit telefon po zvětšení restartovat (znovu do recovery) a pak zkusit instalaci znovu. V mém případě i když se system/ po “mount -a” připojil, během instalace se sám od sebe zase odpojil. Restart systému pomohl a po rebootu už byl připojen stabilně.