UFSの備忘録 % Home / Categories

Android上chroot运行Debian笔记

Created 2021-08-30 / Updated 2022-11-30

前提:

先在PC上完成第一阶段:

# mkdir debian
# debootstrap --arch=arm64 --variant=minbase --foreign --no-check-gpg --components=main,contrib,non-free --include=vim,iputils-ping,whiptail bullseye ./debian https://mirrors.ustc.edu.cn/debian

完成后打包,传到手机上:

# tar cvpf debian.tar ./debian

打开手机上的Termux或其它终端模拟器,挂载SD卡上的ext4分区:

# su
# mkdir /data/local/linux

# mount -o noatime,exec,dev,suid /dev/block/xxx /data/local/linux
# tar xvpf debian.tar -C /data/local/linux

# export ROOT=/data/local/linux/debian

# mount -o mode=1777,nosuid,nodev -t tmpfs tmpfs $ROOT/tmp
# mount --bind /dev $ROOT/dev
# mount --bind /dev/pts $ROOT/dev/pts
# mount --bind /proc $ROOT/proc
# mount --bind /sys $ROOT/sys

# chroot $ROOT /usr/bin/env -i HOME=/root TERM='xterm-256color' PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash --login

在手机上完成第二阶段:

# ./debootstrap/debootstrap --second-stage

至此,系统已安装完成,接下来是配置部分:

创建用户组:

# groupadd -g 3003 aid_inet

(所有需要访问网络的用户都可以添加到该组中)

添加_aptaid_inet用户组:

# gpasswd -a _apt aid_inet

aid_inet设为_apt的主用户组:

# usermod -g aid_inet _apt

设置时区:

# dpkg-reconfigure tzdata

(不知为何,前面安装的whiptail在这里居然不生效?奇怪)

设置DNS服务器:

# vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

设置主机名:

# echo "Debian" > /etc/hostname
# hostname Debian

添加以下内容到/etc/hosts

127.0.0.1 localhost
127.0.1.1 Debian(主机名)

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

更新软件源:

# apt-get update

设置语言环境:

# apt-get install locales
# dpkg-reconfigure locales

设置密码:

# passwd

添加用户:

# adduser xxx

清理:

# apt-get clean

其它:

一、访问手机存储卡的内容:

# groupadd -g 9997 aid_everybody
# gpasswd -a xxx aid_everybody
# mount --bind /sdcard /mnt

这样在Debian的/mnt目录下xxx用户就能看到Android手机存储卡上的内容了。本人系统是Android 8.0版本,经测试,内部存储卡可正常读写,外部存储卡只有root才能写入。

二、在运行chromium或firefox时会有/dev/shm相关的问题,可这样解决:

# mkdir /dev/shm
# mount -t tmpfs tmpfs /data/local/linux/debian/dev/shm

三、chroot时切换到特定用户:

# chroot $ROOT /usr/bin/env -i HOME=/root TERM='xterm-256color' PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/dash -c 'su - <用户名>'

参考:

Categories: [Android] [Linux]