blob: 2c06843ace34b7fa3d53c91cc9134eb878fe5fa4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
Debroid
=======
Install a full blown Debian GNU/Linux Chroot on a LG G3 D855 CyanogenMod 12. Needs root and needs developer mode activated.

On Linux (tested on Fedora 22) prepare a Debian GNU/Linux Jessie base image.
```code
sudo yum install debootstrap
# 5g
dd if=/dev/zero of=jessie.img bs=$[ 1024 * 1024 ] \
count=$[ 1024 * 5 ]
# Show used loop devices
losetup -f
# Use the next free one (replace the loop number)
losetup /dev/loop0 jessie.img
mkdir jessie
sudo mkfs.ext4 /dev/loop0
sudo mount /dev/loop0 jessie
sudo debootstrap --foreign --variant=minibase \
--arch armel jessie jessie/ \
http://http.debian.net/debian
sudo umount jessie
```
Initial (manual) setup on external SD card on the Phone via Android Debugger:
```
adb root && adb wait-for-device && adb shell
mkdir -p /storage/sdcard1/Linux/jessie
exit
adb push jessie.img /storage/sdcard1/Linux
adb shell
cd /storage/sdcard1/Linux
# Show used loop devices
losetup -f
# Use the next free one (replace the loop number)
losetup /dev/block/loop1 $(pwd)/jessie.img
mount -t ext4 /dev/block/loop1 $(pwd)/jessie
# Bind-Mound proc, dev, sys`
busybox mount --bind /proc $(pwd)/jessie/proc
busybox mount --bind /dev $(pwd)/jessie/dev
busybox mount --bind /dev/pts $(pwd)/jessie/dev/pts
busybox mount --bind /sys $(pwd)/jessie/sys
# Bind-Mound the rest of Android
mkdir -l $(pwd)/jessie/storage/sdcard{0,1}
busybox mount --bind /mnt/shell/emulated \
$(pwd)/jessie/storage/sdcard0
busybox mount --bind /storage/sdcard1 \
$(pwd)/jessie/storage/sdcard1
# Check mounts
mount | grep jessie
```
Second debootstrap stage, but inside the chroot on Android!
```
LD_PRELOAD='' chroot $(pwd)/jessie /bin/bash -l
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
/debootstrap/debootstrap --second-stage
exit # Leave chroot
exit # Leave adb shell
```
Setup various scripts:
```
# jessie.sh
adb push storage/sdcard1/Linux/jessie.sh /storage/sdcard/Linux/
adb shell
cd /storage/sdcard1/Linux
sh jessie.sh enter
# Bashrc
cat <<END >~/.bashrc
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
export EDITOR=vim
hostname $(cat /etc/hostname)
# Fixing an error message while loading the profile
sed -i s#id#/usr/bin/id# /etc/profile
# Setting the hostname
echo phobos > /etc/hostname
echo 127.0.0.1 phobos > /etc/hosts
hostname phobos
# Apt-sources
cat <<END > sources.list
deb http://ftp.uk.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.uk.debian.org/debian/ jessie main contrib non-free
END
apt-get update
exit # Exit chroot
```
Debroid services startup (we don't use the Debian runlevels yet)
```
sh jessie.sh enter
# Setup example serice uptimed
apt-get install uptimed
cat <<END > /etc/rc.debroid
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
service uptimed status &>/dev/null || service uptimed start
exit 0
END
chmod 0755 /etc/rc.debroid
exit # Exit chroot
exit # Exit adb shell
```
Include to Android startup (userinit.sh seems not to work on CM12, so we use a different way here):
```
adb push data/local/debroid.sh /data/local
```
Afterwards install a program like ROM Toolbox and add the following bootup command:
```
/system/bin/sh /data/local/debroid.sh
```
Reboot & test!
Enjoy!
|