phoenix-powerAndroidでもArchLinux!!

Androidのrootを取得します。

BusyBoxをインストールします。

Complete Linux Installerをインストールします。

Android Terminal Emulatorをインストールします。

archlinux-CORE.ext4.zipをダウンロードし、/sdcard/archlinux/に解凍して出てきたarchlinux-CORE.ext4.imgarchlinux-CORE.ext4.img.md5を置きます。

bootscript-devfix.shをダウンロードし、/data/data/com.zpwebsites.linuxonandroid/files/bootscript.shに上書きコピーします。

Complete Linux Installerを起動し、Launcher > Setting > Editよりイメージファイルを指定します。

/sdcard/archlinux/archlinux-CORE.ext4.img

後は、Start Linuxをタップすると、Terminalが起動しますので、yArch Linuxが起動します。

起動後は、アップデートとか調整とかすれば良いのではないでしょうか。

1
$ pacman -Syu

エラー情報

ERROR: ld.so: object ‘libsigchain.so’ from LD_PRELOAD cannot be preloaded: ignored.

Linux-on-Android project

1
2
3
$ touch ~/.bashrc

$ echo "unset LD_PRELOAD;" >> ~/.bashrc

Error: Unable to mount the loop device!

bootscript-devfix.sh
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# Linux boot script for Android v5.0.2
# OS Type : Arch Linux
# img : /sdcard/archlinux/archlinux-CORE.ext4.img

###########################################
# This is a function we use to stop the   #
# script in case of errors                #
###########################################
error_exit() {
    echo "Error: $1"
    exit 1
}

###########################################
# Set up variables                        #
###########################################
if [ -f /data/data/com.zpwebsites.linuxonandroid/files/busybox ]; then
          export bbox=/data/data/com.zpwebsites.linuxonandroid/files/busybox
elif [ -f /data/data/com.zpwebsites.linuxonandroid.opensource/files/busybox ]; then
          export bbox=/data/data/com.zpwebsites.linuxonandroid.opensource/files/busybox
else
  export bbox=/system/xbin/busybox
fi

export usermounts=android  # Base folder all user mounts are done in, should be moved to app later

#export imgfile=/storage/emulated/legacy/archlinux/archlinux-CORE.ext4.img
export imgfile=/sdcard/archlinux/archlinux-CORE.ext4.img   # Default image file, another can be set by using an argument

export bin=/system/bin
export mnt=/data/local/mnt
export USER=root
if [[ ! -d $mnt ]]; then mkdir $mnt; fi
export PATH=$bin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:/usr/local/sbin:/usr/games:$PATH
export TERM=linux
export HOME=/root

unset LD_PRELOAD
###########################################
# Handle arguments if present             #
###########################################
if [ $# -ne 0 ]; then
    if [ -f $1 ]; then # Is full path present?
        imgfile=$1

  elif [ -f $(dirname $0)/$1 ]; then # Is only a filename present?
        imgfile=$(dirname $0)/$1

  else
        error_exit "Image file not found!($1)"
    fi
fi

###########################################
# If a md5 file is found we check it here #
###########################################
if [ -f $imgfile.md5 ]; then
        echo "MD5 file found, use to check .img file? (y/n)"
  read answer
  if [ $answer == y ]; then
       echo -n "Validating image checksum... "
           $bbox md5sum -c -s $imgfile.md5
           if [ $? -ne 0 ];then
                  echo "FAILED!"
                  error_exit "Checksum failed! The image is corrupted!"
             else
                  echo "OK"
                  rm $imgfile.md5
             fi
  fi
   
fi
################################
# Find and read config file    #
# or use defaults if not found #
################################
use_swap=yes

cfgfile=$imgfile.config # Default config file if not specified

if [ -f $imgfile.config ]; then
  source $imgfile.config
fi

###########################################
# Set Swap up if wanted                   #
#                                         #
###########################################
if [ $use_swap == yes ]; then
  if [ -f $imgfile.swap ]; then
      echo "Swap file found, using file"
      echo "Turning on swap (if it errors here you do not have swap support"
      swapon $imgfile.swap
      
  else
      echo "Creating Swap file"
      dd if=/dev/zero of=$imgfile.swap bs=1048576 count=1024
      #dd if=/dev/zero of=$imgfile.swap bs=2000000 count=1024
      mkswap $imgfile.swap
      echo "Turning on swap (if it errors here you do not have swap support"
      swapon $imgfile.swap
          
  fi
fi
###########################################
# Set up loop device and mount image      #
###########################################
echo -n "Checking loop device... "
if [ -b /dev/block/loop255 ]; then
  echo "FOUND"
else
  echo "MISSING"
  # Loop device not found so we create it and verify it was actually created
  echo -n "Creating loop device... "
  $bbox mknod /dev/block/loop255 b 7 255
  if [ -b /dev/block/loop255 ]; then
      echo "OK"
  else
      echo "FAILED"
      #error_exit "Unable to create loop device!"
  fi
fi

$bbox losetup /dev/block/loop255 $imgfile
#if [ $? -ne 0 ];then error_exit "Unable to attach image to loop device! (Image = $imgfile)"; fi

$bbox mount -t ext4 /dev/block/loop255 $mnt
#if [ $? -ne 0 ];then error_exit "Unable to mount the loop device!"; fi

###########################################
# Mount all required partitions           #
###########################################
$bbox mount -t devpts devpts $mnt/dev/pts
if [ $? -ne 0 ];then $bbox mount -o bind /dev $mnt/dev; $bbox mount -t devpts devpts $mnt/dev/pts; fi
#if [ $? -ne 0 ]; then error_exit "Unable to mount $mnt/dev/pts!"; fi
$bbox mount -t proc proc $mnt/proc
#if [ $? -ne 0 ];then error_exit "Unable to mount $mnt/proc!"; fi
$bbox mount -t sysfs sysfs $mnt/sys
#if [ $? -ne 0 ];then error_exit "Unable to mount $mnt/sys!"; fi
$bbox mount -o bind /sdcard $mnt/sdcard
#if [ $? -ne 0 ];then error_exit "Unable to bind $mnt/sdcard!"; fi

if [[ ! -d $mnt/root/cfg ]]; then mkdir $mnt/root/cfg; fi
$bbox mount -o bind $(dirname $imgfile) $mnt/root/cfg

$bbox mount -o bind /sys/fs/selinux $mnt/selinux

###########################################
# Checks if you have a external sdcard    #
# and mounts it if you do                 #
###########################################
if [ -d /sdcard/external_sd ]; then
  $bbox mount -o bind /sdcard/external_sd  $mnt/external_sd
fi
if [ -d /Removable/MicroSD ]; then
  $bbox mount -o bind /Removable/MicroSD  $mnt/external_sd
fi
# This is for the HD version of the Archos 70 internet tablet, may be the same for the SD card edition but i dont know.
if [ -d /storage ]; then
  $bbox mount -o bind /storage  $mnt/external_sd
fi

###########################################
# Mount all user defined mounts if any    #
###########################################
if [ -f $imgfile.mounts ]; then
  olddir=$(pwd)
  echo "Mounting user mounts"

  cd $mnt
  if [[ ! -d $mnt/$usermounts ]]; then $bbox mkdir -p $usermounts; fi

  echo "# Script to unmount user defined mounts, do not delete or edit!" > $imgfile.shutdown
  echo "cd $mnt/$usermounts" > $imgfile.shutdown

  cd $mnt/$usermounts
  for entry in $(cat "$imgfile.mounts"); do
      ANDROID=${entry%;*}
      LINUX=${entry#*;}

      if [[ -d $ANDROID ]]; then
          echo -n "Mounting $ANDROID to $usermounts/$LINUX... "
          if [[ ! -d $mnt/$usermounts/$LINUX ]]; then $bbox mkdir -p $LINUX; fi
          $bbox mount -o bind $ANDROID $mnt/$usermounts/$LINUX &> /dev/null
          if [ $? -ne 0 ];then
              echo FAIL
              if [[ -d $mnt/$usermounts/$LINUX ]]; then $bbox rmdir -p $LINUX; fi
          else
              echo OK
              echo "$bbox umount $mnt/$usermounts/$LINUX" >> $imgfile.shutdown
              echo "$bbox rmdir -p $LINUX" >> $imgfile.shutdown
          fi
      else
          echo "Android folder not found: $ANDROID"
      fi
  done
  echo "cd $mnt" >> $imgfile.shutdown
  echo "$bbox rmdir -p $usermounts" >> $imgfile.shutdown
  cd $olddir

else
  echo "No user defined mount points"
fi

###########################################
# Sets up network forwarding              #
###########################################
$bbox sysctl -w net.ipv4.ip_forward=1
if [ $? -ne 0 ];then error_exit "Unable to forward network!"; fi

# If NOT $mnt/root/DONOTDELETE.txt exists we setup hosts and resolv.conf now
if [ ! -f $mnt/root/DONOTDELETE.txt ]; then
  echo "nameserver 8.8.8.8" > $mnt/etc/resolv.conf
  if [ $? -ne 0 ];then error_exit "Unable to write resolv.conf file!"; fi
  echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf
  echo "127.0.0.1 localhost" > $mnt/etc/hosts
  if [ $? -ne 0 ];then error_exit "Unable to write hosts file!"; fi
fi

###########################################
# Chroot into ubuntu                      #
###########################################
$bbox chroot $mnt /root/init.sh $(basename $imgfile)

unset LD_PRELOAD

###########################################
# Shut down ubuntu                        #
###########################################
echo "Shutting down Linux ARM"
#for pid in `lsof | grep $mnt | sed -e's/  / /g' | cut -d' ' -f2`; do kill -9 $pid >/dev/null 2>&1; done
for pid in `$bbox lsof | $bbox grep $mnt | $bbox sed -e's/  / /g' | $bbox cut -d' ' -f2`; do $bbox kill -9 $pid >/dev/null 2>&1; done
sleep 5

###########################################
# Unmount all user defined mounts if any  #
###########################################
if [ -f $imgfile.shutdown ]; then
  echo "Unmounting user defined mounts"
  sh $imgfile.shutdown
  rm $imgfile.shutdown
fi

$bbox umount $mnt/root/cfg
$bbox umount $mnt/sdcard
$bbox umount $mnt/external_sd
$bbox umount $mnt/dev/pts
$bbox umount $mnt/dev
$bbox umount $mnt/proc
$bbox umount $mnt/sys
$bbox umount $mnt/selinux
$bbox umount $mnt
$bbox losetup -d /dev/block/loop255 &> /dev/null

ERROR: Partition / to full

1
2
3
4
5
6
7
8
$ df -H

$ vim /etc/pacman.conf
CacheDir = /sdcard/pacman/cache/pkg

$ rm -rf /var/cache/pacman/pkg

$ pacman -Syu