Android Vscode Remote Develop环境搭建
Android Vscode Remote Develop环境搭建
背景
探索 Android 上运行 eBPF 的环境,需要在 Android 上执行 vscode server 进行。
使用 SSH 进行代码的远程开发以及运行。
实现
在 Android 上执行一个 chroot,并在 chroot 中执行 sshd,最后通过 vscode remote ssh 插件进行vscode server 的配置。
过程
pre0
1.手机 root
2.安装 Magisk-SSH 模块开启 ssh(如果没有 ssh,eadb 无法连接到手机上)
chroot配置
下载 eadb ,使用 eadb 安装 debian 11 rootfs
Refs: https://github.com/tiann/eadb
1.安装eadb
1 | 安装 rust |
2.构建debian 11 rootfs
1 | sudo eadb build |
3.配置debian rootfs
1 | eadb --ssh root@ip prepare -a path/to/archive |
chroot ssh
pre0 apt配置
debian rootfs由于只做了最简单的配置,apt是存在一些问题,有些包是无法安装的
1 | W: Download is performed unsandboxed as root as file '/var/lib/apt/lists/partial/ftp.us.debian.org_debian_dists_bullseye_InRelease' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) |
这个警告信息表明,APT 在以 root 用户身份下载文件时,无法让
_apt
用户访问某些目录或文件。以下是解决这个问题的步骤:
创建
_apt
用户和组:1
2
3
4
5
6
7
8
9
10
11
12groupadd _apt # 添加_apt group
useradd -g _apt -d /nonexistent -s /usr/sbin/nologin _apt
sudo chown -R _apt:_apt /var/lib/apt/lists/partial/
sudo chmod 700 /var/lib/apt/lists/partial/
# sudo: 以超级用户权限执行命令。
# useradd: 创建新用户的命令。
# -g _apt: 指定用户所属的初始组为 _apt。
# -d /nonexistent: 指定用户的主目录为 /nonexistent,表示该用户没有实际的主目录。
# -s /usr/sbin/nologin: 指定用户的登录shell为 /usr/sbin/nologin,防止用户直接登录。
# _apt: 新用户的用户名。设置正确的权限
1 | sudo chown -R _apt:_apt /var/lib/apt/lists/partial/ |
- 安装sudo(针对于chroot环境约等于什么都不做,只是很多时候会习惯使用sudo,但是报错很不舒服。)
1 | apt install sudo |
软件环境安装
1.安装ssh
1 | sudo apt install ssh |
2.配置ssh端口号
1 | vim /etc/ssh/sshd_config |
3.启动sshd
很奇怪?
不是已经配置了sshd吗?难道systemd在chroot的时候不会自动启动sshd?没错还真是这样(・o・)ノYes!!
因为chroot的隔离性比较差,所以systemd是没有单独适配的,所以依赖systemd启动的服务并不会正常启动。
而sshd正是这样的服务。
我们需要自己手动调用,这样才有ssh链接到。
1 | /usr/sbin/sshd -f /etc/ssh/sshd_config |
vscode链接配置
1.安装Remote SSH插件
2.配置 config 文件
最终效果图
其他
网络环境配置
Way1:
安装 clash meta,开启 tun 代理
Way2:
完整 clash meta,通过 adb reverse 代理给主机,通过主机的 clash 节点开启网络。
QA
- 为什么不直接 SSH 连接主机而是连接 chroot
最开始也是考虑过的,只不过由于android环境的差异,vscode server 直接崩溃了。
1
2
3
4
5 [2025-01-25 09:32:20] error This machine does not meet Visual Studio Code Server's prerequisites, expected either...
\- find libstdc++.so or ldconfig for GNU environments
\- find /lib/ld-musl-aarch64.so.1, which is required to run the Visual Studio Code Server in musl environments没办法了只能使用 chroot 了