Table des matières

Replicant sur GT-i9100 (samsung S2)


Replicant est une distribution Android entièrement open-source n'étant pas équipe de logiciel privatif ou d'applications liée directement à Google. C'est un système d'exploitation mobile à base de logiciel libre mettant l'accent sur la liberté et la vie privée / sécurité

Ce tutoriel est compatible pour Replicant 6.0 dont mon pc était sous Lubuntu 17.04 (zesty) (noyau 4.10)

Une fois les installations faites, de nombreuses APK sont disponible sur le site APKMirror

Pré-requis

Ressources documentaires :

Téléchargeons la dernière version système et le recovery respectif de Replicant : https://redmine.replicant.us/projects/replicant/wiki/ReplicantImages

Puis vérifier la correspondance de la ROM grâce au checksum :

sha256sum recovery-i9100.img 
sha256sum replicant-6.0-i9100.zip

On aura besoin de ces paquets par la suite :

apt-get install heimdall-flash android-tools-adb

Installer le recovery

Commençons par stopper totalement le smartphone puis appuyer sur les touches :

Volume bas + Menu + Power

Puis sélectionner le volume haut pour accepter de télécharger des données. Depuis le pc on peut faire :

heimdall flash --KERNEL recovery-i9100.img
Notons que –KERNEL conrrespond au nom de la partition logique que l'on peut retrouver en faisant “heimdall print-pit –no-reboot –stdout-errors”

Installer la ROM

Une fois le terminée, il va redémarrer en mode recovery. Il faudra alors suivre ces étapes :

Depuis le pc on téléversera la ROM :

adb sideload replicant-6.0-i9100.zip

Terminons par supprimer toutes les informations concernant le mode usine :

Le 1er démarrage va être lent car il paramétrera les applications de bases. Cela devrait prendre moins de 10 minutes.

Notons que la procédure est la même pour son upgrade

Installer le firmware Wifi et Bluetooth

Les étapes qui vont suivre sont pas plus compliqué que précédemment, il suffit de télécharger une suite de fichiers. Créons d'abord un dossier qui les regroupera :

mkdir firmware
cd firmware
for i in bcmdhd_{apsta,sta,p2p}.bin nvram_net.txt; do wget 'https://raw.githubusercontent.com/TheMuppets/proprietary_vendor_samsung/cm-14.1/i9100/proprietary/system/etc/wifi/'$i; done
cd ../
wget https://redmine.replicant.us/attachments/download/1484/dhd.ko

Il faut pas la suite s'assurer que le téléphone (en état de marche) puisse communiquer avec le pc. On se rend dans les paramètres en suivant ces menus :

Il reste plus qu'a téléverser les fichiers avec les bon droits puis de faire un reboot pour prendre en compte les changements (se mettre en tant que root sur sa machine locale ) :

adb root
adb remount
adb push dhd.ko /system/lib/modules/dhd.ko
adb shell mkdir /system/vendor/firmware
adb shell chown root:shell /system/vendor/firmware
adb shell chmod g-w,o-w /system/vendor/firmware
find firmware/ -type f -exec adb push {} /system/vendor/firmware \;
adb reboot

Activez le Wifi et vous devez maintenant être dans la capacité de voir les points d'accès environnant. En cas de soucis, plus de détails sont données à cet article : https://manurevah.com/blah/en/p/Replicant-6-Enabling-Wifi-on-Galaxy-2-i9100

Debuggage

Si vous rencontrez ce type d'erreur :

ADB server didn't ACK* failed to start daemon *

Relancer le daemon ainsi :

adb kill-server
adb start-server

Installer le firmware GPS

Ci dessous, ce sont juste des prises de notes car à ce jour, c'est très mal supporté.

mkdir gps
cd gps
for i in {libakm,libsec-ril,libsecril-client}.so ; do wget 'https://raw.githubusercontent.com/TheMuppets/proprietary_vendor_samsung/cm-14.1/i9100/proprietary/system/lib/'$i; done
cd ../
wget https://github.com/TheMuppets/proprietary_vendor_samsung/blob/cm-14.1/i9100/proprietary/system/lib/hw/gps.exynos4.so
adb push gps.exynos4.so /system/lib/hw/
find gps/ -type f -exec adb push {} /system/lib \;

Sources :

Build Image

Gardons en tête que les codes sources sont disponible ici : https://git.replicant.us/replicant/device_samsung_i9100/

Les prochaines étapes vont requières ~70Go d'espace disque et plusieurs heures d'installations.

Dépendances

C'est la première étape :

dpkg --add-architecture i386 ; apt-get update

Il faudra vérifier dans les sources.list si l'option “deb-src” est bien active pour ensuite exécuter les commandes suivantes :

apt-get build-dep gcc binutils llvm-defaults
apt-get install bash gcc-arm-none-eabi cmake python-dev swig ant bc proguard maven-debian-helper libemma-java libasm4-java libguava-java libnb-platform18-java libnb-org-openide-util-java libandroidsdk-ddmlib-java libmaven-source-plugin-java libfreemarker-java libmaven-javadoc-plugin-java ca-cacert curl gawk libgmp3-dev libmpfr-dev libmpc-dev git-core gperf libncurses-dev squashfs-tools pngcrush zip zlib1g-dev lzma libc6-dev-i386 g++-multilib lib32z1-dev lib32readline-dev lib32ncurses5-dev zlib1g-dev:i386 xsltproc python-mako schedtool gradle dirmngr libandroidsdk-sdklib-java eclipse-jdt libgradle-android-plugin-java android-sdk-build-tools android-sdk-platform-23 aapt lzop rsync

Installons les outils de Google :

mkdir ~/.bin
cd ~/.bin
git clone https://android.googlesource.com/tools/repo
chmod a+x repo
ln -s ~/.bin/repo/repo /usr/local/bin/repo

Initialiser le projet

Passons à la partie concernant le projet Replicant :

mkdir ~/replicant-6.0
cd ~/replicant-6.0
repo init -u https://git.replicant.us/replicant/manifest.git -b replicant-6.0
repo sync

Préconstruire les applications :

gpg --recv-key 37D2C98789D8311948394E3E41E7044E1DBA2E89
vendor/replicant/get-prebuilts

Ces deux commandes sont à relancer à chaque fois qu'on lance un “repo sync”

Construction

Nous aurons besoin de la toolchain (La compilation peut prendre plusieurs heures) :

cd ~/replicant-6.0
./vendor/replicant/build-toolchain

Puis enfin compiler l'image Replicant (Idem, la patience est grandement requise) :

./vendor/replicant/build.sh i9100

Des binaires se trouverons dans out/host/linux-x86/bin/ et out/dist/i9100/

Commandes utiles

adb start-server
adb kill-server
adb devices
adb shell ls /sdcard/
adb reboot recovery
adb reboot bootloader
adb wait-for-device

Enregistrer son écran

Ajouter dans le bashrc :

screenStream() {
while true
do
adb exec-out screenrecord --output-format=h264 --size 1024x768 - 
done
}

Puis lancer sa diffusion :

screenStream |ffplay -framerate 60 -probesize 32 -framedrop -bufsize 16M -sync video  -