因为没有电脑,免费的 VPS 连接太慢操作不方便,就想搞个 Linux 在手机上面。

准备

先下载 arm 版:https://archlinuxarm.org/about/downloads
然后手机里面还要有 busybox

开始

创建文件夹并解压

因为 sdcard 没有办法更改权限所以放到 /data 里面。

1
2
3
su
mkdir /data/arch
tar xvf ArchLinuxARM-armv7-latest.tar.gz -C /data/arch/

chroot 进去

1
2
3
4
5
6
unset LD_PRELOAD TMPDIR
busybox mount --rbind /dev /data/arch/dev
busybox mount --rbind /proc /data/arch/proc
busybox mount --rbind /sys /data/arch/sys
busybox mount -t tmpfs tmpfs /data/arch/tmp
chroot /data/arch /bin/bash

如果手机里面配置了c4droid的gcc环境变量的的话也要先unset,不然make会一直提示segmentation fault(这个可把我坑惨了)。

设置

配置 DNS

1
2
3
rm /etc/resolv.conf
echo "nameserver 223.5.5.5" > /etc/resolv.conf
chmod 644 /etc/resolv.conf

换源

echo 'Server = http://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo' > /etc/pacman.d/mirrorlist

设置主机名

1
2
echo miuna > /etc/hostname
hostname miuna

source profile

source /etc/profile

更新系统

pacman -Syu base-devel

添加普通用户

1
2
3
userdel alarm #删除自带的
useradd -m -g users -G wheel -s /bin/bash riko
passwd riko

修改 sudoers 文件

nano -w /etc/sudoers
添加
riko ALL=(ALL) ALL

安装 yaourt

package-query

1
2
3
4
git clone https://aur.archlinux.org/package-query.git
cd package-query
makepkg -si
cd ..

yaourt

1
2
3
4
git clone https://aur.archlinux.org/yaourt.git
cd yaourt
makepkg -si
cd ..

如果这段 fakeroot 出错了,有可能是手机内核的问题。可以照 Knifefire 说的换用fakeroot-tcp

一些问题

data 分区权限

如果 sudo 提示 sudo: effective uid is not 0, is /sbin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?的话可以重挂载/data。
先退出chroot,然后执行mount -o,remount,suid /data

/dev/fd/62: No such file or directory

chroot下执行 ln -s /proc/self/fd /dev/fd

网络权限

1
2
3
4
5
6
7
groupadd -g 3001 net_bt_admin
groupadd -g 3002 net_bt
groupadd -g 3003 inet
groupadd -g 3004 net_raw
usermod -a -G net_bt_admin,net_bt,inet,net_raw root
usermod -a -G net_bt_admin,net_bt,inet,net_raw riko
newgrp inet

内置储存权限

如果把内置储存挂到这里并且用普通用户的话需要配置下。

1
2
3
4
groupadd -g 1015 sdcard_rw
groupadd -g 1023 media_rw
groupadd -g 1028 sdcard_r
usermod -a -G sdcard_rw,media_rw,sdcard_r riko

剩下还有一大堆权限,什么录音的啊,相机的啊,GPS…一大堆。不过好像都用不到。

如果手机重启后想再次进入只需要重新执行下面的命令就好啦。

1
2
3
4
5
6
7
busybox mount -o,remount,suid /data
busybox mount --rbind /dev /data/arch/dev
busybox mount --rbind /proc /data/arch/proc
busybox mount --rbind /sys /data/arch/sys
busybox mount -t tmpfs tmpfs /data/arch/tmp
unset LD_PRELOAD TMPDIR
chroot /data/arch /bin/bash

梓(1).gif