Bootstrap

Termux

Termux

准备工作

安装Termux

F-Droid中下载安装文件。

更换软件源

# 替换源(main)
pushd $PREFIX/etc/apt
cp sources.list sources.list.bak
awk '{for(i=1;i<=NF;i++)printf("%s ",$i~/^https?:\/\//?"https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main":$i); printf("\n")}' sources.list.bak>sources.list
cat sources.list
# 添加源(x11、root)
pkg install -y x11-repo root-repo
# 替换源(x11)
pushd $PREFIX/etc/apt/sources.list.d
cp x11.list x11.list.bak
cp root.list root.list.bak
awk '{for(i=1;i<=NF;i++)printf("%s ",$i~/^https?:\/\//?"https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-x11":$i); printf("\n")}' x11.list.bak>x11.list
cat x11.list

# 替换源(root)
awk '{for(i=1;i<=NF;i++)printf("%s ",$i~/^https?:\/\//?"https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-root":$i); printf("\n")}' root.list.bak>root.list
cat root.list
# 应用源
pkg update

SSH服务

# 安装服务(无法支撑RemoteSSH)
pkg install -y openssh
# 查看当前用户名
whoami

# 设置当前用户密码
passwd
# 关闭服务
pkill sshd

# 启动服务
sshd
# 测试登录
ssh `whoami`@127.0.0.1 -p 8022

基础软件

# 文本编辑
pkg install -y vim && (
  echo -e "if has('mouse')\n  set mouse-=a\nendif">~/.vimrc
)
# 网络下载工具
pkg install -y wget curl aria2
# 压缩类
pkg install -y zip p7zip
# 版本控制
pkg install -y git
# 后台进程管理
pkg install -y screen

其它设置

# 创建“SD卡主目录”
mkdir -p /storage/emulated/0/Download/Termux

# 关联“SD卡主目录”到当前家目录
ln -s /storage/emulated/0/Download/Termux ~/Termux

# 关联(.ssh)
rm -rf ~/.ssh
ln -s ~/Termux/.ssh ~/.ssh
# 添加`ll`命令
echo 'alias ll="ls -al"'>>~/.bashrc

进阶服务

HTTP服务

# 安装Nginx
pkg install -y nginx
# 测试安装成功
nginx -v
# 创建SD卡下html目录
mkdir -p /storage/emulated/0/Download/Termux/html

# 编辑配置
vim $PREFIX/etc/nginx/nginx.conf
server {
  listen       8080;
  server_name  localhost;
  index  index.html index.htm;

  location / {
    root   /storage/emulated/0/Download/Termux/html;
  }

  location /files {
    alias /storage/emulated/0/Download/Termux/html/files;
    autoindex on;               # 显示目录
    autoindex_exact_size off;   # 显示详细文件大小
    autoindex_localtime on;     # 使用本地时间
    autoindex_format html;      # html | xml | json | jsonp
    charset utf-8;              # 解决文件乱码问题
  }
}
# 关闭服务
nginx -s quit

# 启动服务
nginx
# 测试服务
curl http://127.0.0.1:8080/
curl http://127.0.0.1:8080/files/

SMB服务

# 安装Samba服务
pkg install -y samba
# 创建SD卡下Share目录
mkdir -p /storage/emulated/0/Download/Termux

# 创建Home下Share目录
mkdir -p ~/projects

# 创建配置
mkdir $PREFIX/etc/samba/
cp $PREFIX/share/doc/samba/smb.conf.example $PREFIX/etc/samba/smb.conf

vim $PREFIX/etc/samba/smb.conf

# 向“smb.conf”追加以下内容
[Termux]
    comment = SD Termux
    # 共享路径(根据实际情况修改)
    path = /storage/emulated/0/Download/Termux
    # 权限
    available = yes
    browseable = yes
    writable = yes
    # read only = no
    create mask = 0117
    directory mask = 0007
    # 宾客权限
    public = no
    guest ok = no
    # Windows下工作组
    workgroup = Termux
    # 允许访问的用户(根据实际情况修改)
    valid users = u0_a312
    # 允许写入的用户(根据实际情况修改)
    write list = u0_a312
[Projects]
    comment = Main Projects
    # 共享路径(根据实际情况修改)
    path = /data/data/com.termux/files/home/projects
    # 权限
    available = yes
    browseable = yes
    writable = yes
    # read only = no
    create mask = 0117
    directory mask = 0007
    # 宾客权限
    public = no
    guest ok = no
    # Windows下工作组
    workgroup = Termux
    # 允许访问的用户(根据实际情况修改)
    valid users = u0_a312
    # 允许写入的用户(根据实际情况修改)
    write list = u0_a312
# 关闭服务
pkill smbd

# 启动服务
smbd
# 创建SMB用户(将当前用户设置为SMB用户)
smbpasswd -La
# New SMB password:
# Retype new SMB password:
# Added user u0_a312.
REM 释放445端口,重启生效
REM Computer Browser : 维护计算机列表更新
sc config Browser start=disabled
REM Server : 网络文件、网络打印机
sc config LanmanServer start=disabled

REM 检查本机445端口可用性
REM 协议 本地地址 外部地址 状态 PID
netstat -ano | findstr :445

REM 关闭端口转发
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=445
netsh interface portproxy show all

REM 开始端口转发
netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=4445 connectaddress=192.168.1.100
netsh interface portproxy show all

使用\\127.0.0.1访问共享目录

MYSQL服务

# 安装数据库
pkg install -y mariadb
# 关闭服务
pkill mysqld

# 启动服务
mysqld&
# 登录数据库(无需密码)
mysql

# 登录数据库
mysql -uroot -proot
-- 查看当前用户
SELECT `User`,`Host`,`Password` FROM `mysql`.`user`;
-- +-------------+-----------+----------+
-- | User        | Host      | Password |
-- +-------------+-----------+----------+
-- | mariadb.sys | localhost |          |
-- | root        | localhost | invalid  |
-- | u0_a312     | localhost | invalid  |
-- |             | localhost |          |
-- +-------------+-----------+----------+

-- 修改用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

-- 退出
QUIT;

编程语言

C

# 安装GCC
pkg install -y clang

# 检查安装
gcc --version
g++ --version
# demo
gcc main.c -o main
./main

Java

# 安装JDK
pkg install -y openjdk-17

# 检查安装
java --version
javac --version
# demo
javac Main.java
java Main

Python

# 安装Python
pkg install -y python

# 检查安装
python -V
pip -V
# demo
python main.py

Nodejs

# 安装Nodejs
pkg install -y nodejs-lts

# 检查安装
node -v
npm -v
# demo
node main.js

GUI

X11

# 安装X11测试软件
pkg install -y xorg-xclock
# export DISPLAY=[IP]:A.B
# IP: XServer所在主机
#  A: XServer运行端口为“6000 - A”
#  B: 一般为“0”
export DISPLAY=192.168.1.100:0.0
xclock

VNC

# 安装VNC服务
pkg install -y tigervnc aterm xorg-twm
# 设置VNC登录密码
vncpasswd
# Password:
# Verify:
# Would you like to enter a view-only password (y/n)? n
# vncserver [:<number>] -geometry 920x1080 -depth 32

# 启动服务
vncserver :10 -alwaysshared -geometry 1920x1080 -depth 32

# 访问 IP:5910

# 关闭服务
vncserver -kill :10

vim ~/.vnc/xstartup

#!/data/data/com.termux/files/usr/bin/sh
# 首次连接时需要启动的GUI程序
aterm -geometry 80x24+10+10 -ls &

Xfce

# 安装GUI
pkg install xfce4 xfce4-terminal
# X11显示
export DISPLAY=192.168.1.100:0.0
startxfce4

Geany

# 安装Geany编辑器
pkg install -y geany aterm
# X11显示
export DISPLAY=192.168.1.100:0.0
geany

VLC

# 安装VLC视频播放器
pkg install -y vlc-qt

子系统

Distro

# 安装proot-distro
pkg install -y proot-distro
# 列出可用发行版本
proot-distro list

使用其它方式下载子系统

# 创建SD卡缓冲区目录
mkdir -p /storage/emulated/0/Download/Termux/dlcache
# 创建proot-distro缓冲区目录
mkdir -p $PREFIX/var/lib/proot-distro/
# 连接缓冲
ln -s /storage/emulated/0/Download/Termux/dlcache $PREFIX/var/lib/proot-distro/dlcache
# 检查连接
ls -l $PREFIX/var/lib/proot-distro/dlcache/
  • uname -a查看当前系统架构(aarch64armi686x86_64);
  • 进入distro-plugins选择合适的系统;
  • 定位TARBALL_URL系统链接下载到本地;
  • 将压缩包上传至/storage/emulated/0/Download/Termux/dlcache下;
  • 使用TARBALL_SHA256检查文件完整性;
Ubuntu
# 安装子系统
proot-distro install ubuntu
# 登录子系统
proot-distro login ubuntu
# 查看发行版本
cat /etc/lsb-release | awk -F= '{if($1=="DISTRIB_DESCRIPTION") print $2}'

更换软件源

# 更新源信息(需要梯子)
apt update
# 安装CA
apt install -y ca-certificates
# 换源
pushd /etc/apt
cp sources.list sources.list.bak
IFS=''; read -r -d '' SOURCES_LIST <<"EOF"
for (i=1; i<=NF; i++) {
  if ($i ~ /^main$/) {
    printf("main restricted ")
  } else if ($i ~ /^\[.+\]$/) {
    # Nothing
  } else {
    printf("%s ",$i~/^https?:\/\//?"https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/":$i);
  }
} printf("\n")
EOF
awk "{${SOURCES_LIST}}" sources.list.bak > sources.list
cat sources.list
# 应用源(需要梯子)
apt update

必备软件

# Vim
apt install -y vim
# 网络工具
apt install -y wget curl aria2
# 版本控制
apt install -y git
# 编程语言
# apt search '^(gcc|openjdk-[0-9]+-jdk|nodejs|python3)$'
apt install -y gcc g++ openjdk-17-jdk nodejs npm python3 pip
# Need to get 443 MB of archives.
# After this operation, 1149 MB of additional disk space will be used.

gcc --version
g++ --version
java --version
javac --version
node -v
npm -v
python3 -V
pip -V

SD卡主目录

# 创建并关联“SD卡主目录”
mkdir -p /storage/emulated/0/Download/Termux
ln -s /storage/emulated/0/Download/Termux /Termux

# 关联(files)
ln -s /data/data/com.termux/files/ /Main

# 关联(.ssh)
mkdir -p /Termux/.ssh
ln -s /Termux/.ssh ~/.ssh

SSH

# 安装SSH服务
apt install -y openssh-server
# 查看关键配置
egrep '^#?(Port|StrictModes)' /etc/ssh/sshd_config
# 编辑配置
vim /etc/ssh/sshd_config
#Port 22
Port 8822

#StrictModes yes
StrictModes no
# 生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 设置密钥
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
cp ~/.ssh/id_rsa     ~/.ssh/id_Termux
# 停止服务
/etc/init.d/ssh stop

# 加载配置
/etc/init.d/ssh restart

# 启动服务
/etc/init.d/ssh start
# 本机测试
ssh -i ~/.ssh/id_rsa -p 8822 `whoami`@127.0.0.1

# 本机测试(SFTP不可用)
sftp -i ~/.ssh/id_rsa -P 8822 `whoami`@127.0.0.1
REM 远程测试
ssh -i "%Userprofile%\.ssh\id_Termux" -p 8822 [email protected]
Host Termux
  HostName 192.168.1.100
  Port 8822
  User root
  PreferredAuthentications publickey
  IdentityFile C:\Users\用户名\.ssh\id_Termux

TMOE

# [可略]依赖准备(交互式窗口)
pkg install -y whiptail

# [可略]依赖准备(proot容器)
apt install -y git pv pulseaudio proot bat micro termux-api aria2

# [可略]qemu
# https://mirrors.bfsu.edu.cn/debian/pool/main/q/qemu/qemu-user-static_7.0+dfsg-2~bpo11+2_arm64.deb

# 安装命令(https://gitee.com/mo2/linux)
wget https://gitee.com/mo2/linux/raw/2/2 -O $PREFIX/bin/tmoe
chmod u+x $PREFIX/bin/tmoe
# 首次运行TOME
tmoe
  • 语言环境:zh_CN
  • proot容器
  • 终端颜色:Skip
  • 终端字体:Skip
  • extra-keys-style:No
  • DNS:Tsinghua
  • 启用一言:No
  • Timezone:Asia/Shanghai
  • 挂载SD卡:/sdcard/Download
  • 宿主主目录:/data/data/com.termux/files/home
# 应用路径
ls -l ~/.local/share/tmoe-linux

# 配置路径
ls -l ~/.config/tmoe-linux

# 容器路径
ls -l ~/.local/share/tmoe-linux/containers/proot

# 安装镜像路径
ls -l /sdcard/Download/backup/rootfs

# 备份容器路径
ls -l /sdcard/Download/backup
Debian
  • 运行tmoe
  • proot容器
    • 跨CPU架构
      • x64/amd64
      • Debian
      • 9-stretch
      • 启动容器(首次10min左右)

X11

# X11应用
apt install -y x11-apps

# X11测试
export DISPLAY=192.168.1.100:0.0
xclock

VNC & Xfce

# 安装 VNC
apt install -y tightvncserver
# 安装 Xfce
apt install -y xfce4 xfce4-terminal
# 启动服务
vncserver :1 -alwaysshared -geometry 1920x1080 -name Debian9

# 访问 IP:5901

# 关闭服务
vncserver -kill :1

vim ~/.vnc/xstartup

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export LANG=en_US
startxfce4 &
UOS
  • 上传uos-*-rootfs_bak.tar.zst文件到/sdcard/Download/backup
  • 运行tmoe
  • proot容器
    • Restore
      • /sdcard/Download/backup恢复
    • List installed
      • UOS
      • 启动
# 启动VNC
vncserver :1 -alwaysshared -geometry 1920x1080 -depth 32 -name UOS

# 访问 IP:5901

# 关闭VNC
vncserver -kill :1
;