安卓手机termux安装ubuntu或者Alpine Linux
系统初始化
#!/bin/bash
# Termux 初始化脚本 - 模块化版本
# 检查是否为 Termux 环境
check_termux_environment() {
if [[ "$PREFIX" != "/data/data/com.termux/files/usr" ]]; then
echo "此脚本仅适用于 Termux 环境!"
exit 1
fi
}
# 配置存储权限
configure_storage_permission() {
echo "配置存储权限..."
termux-setup-storage
if [ $? -ne 0 ]; then
echo "存储权限配置失败,请手动运行 termux-setup-storage"
exit 1
fi
}
# 更新包管理器
update_package_manager() {
echo "更新包管理器..."
pkg update -y
if [ $? -ne 0 ]; then
echo "包管理器更新失败"
exit 1
fi
}
# 安装常用软件包
install_common_packages() {
echo "安装常用软件包..."
pkg install -y \
wget \
curl \
git \
nano \
unzip \
zip \
termux-services \
tmux # 追加tmux
if [ $? -ne 0 ]; then
echo "常用软件包安装失败"
exit 1
fi
}
# 安装并启用 OpenSSH
install_and_enable_ssh() {
echo "安装 OpenSSH 服务器..."
pkg install openssh -y
if [ $? -ne 0 ]; then
echo "OpenSSH 安装失败"
exit 1
fi
echo "启用并启动 OpenSSH 服务..."
sv-enable sshd
if [ $? -ne 0 ]; then
echo "OpenSSH 服务启用失败,请手动运行 sv-enable sshd"
exit 1
fi
# 启动 OpenSSH 服务
echo "启动 OpenSSH 服务..."
sshd
if [ $? -ne 0 ]; then
echo "OpenSSH 服务启动失败"
exit 1
fi
# 配置 SSH 密钥对(如果不存在)
if [ ! -f "$HOME/.ssh/id_rsa" ]; then
echo "生成 SSH 密钥对..."
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
ssh-keygen -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
if [ $? -ne 0 ]; then
echo "SSH 密钥生成失败"
exit 1
fi
fi
}
# 配置 Python 开发环境
config_pythondev() {
echo "安装 Python 开发所需的软件包..."
pkg install -y python3 clang
if [ $? -ne 0 ]; then
echo "Python 开发所需软件包安装失败"
exit 1
fi
echo "配置 Python pip 环境变量..."
echo 'export LDFLAGS="-L/data/data/com.termux/files/usr/lib"' >> ~/.bashrc
echo 'export CFLAGS="-I/data/data/com.termux/files/usr/include"' >> ~/.bashrc
source ~/.bashrc
}
# 主函数 - 执行所有模块
main() {
check_termux_environment
configure_storage_permission
update_package_manager
install_common_packages
install_and_enable_ssh
config_pythondev
echo "初始化完成!现在可以使用 Termux 环境了。"
echo "OpenSSH 已启用并启动,可以通过 SSH 客户端连接到 $(hostname) 的 22 端口。"
}
# 执行主函数
main
pkg install root-repo
pkg install openssh
sv-enable sshd
pkg install termux-services
pkg i termux-services
# 安装依赖
pkg install python clang libxml2 libxml2-dev libxslt libxslt-dev
# 使用 pip 安装时需要加环境变量指明头文件路径:
LDFLAGS="-L/data/data/com.termux/files/usr/lib" \
CFLAGS="-I/data/data/com.termux/files/usr/include" \
pip install lxml
Ubuntu
#!/bin/bash
# 安装依赖模块
install_dependencies() {
echo "正在安装依赖..."
pkg update
pkg upgrade -y
pkg install apt -y
pkg install wget -y
pkg install qemu-system-x86_64 -y
}
# 获取 Termux 存储权限模块
setup_termux_storage() {
echo "正在设置 Termux 存储权限..."
termux-setup-storage
if [ $? -ne 0 ]; then
echo "设置 Termux 存储权限失败,脚本将退出。"
exit 1
fi
}
# 创建ubuntusrv文件夹并进入该工作文件夹
mkdir_dir(){
echo "正在设置 Termux 存储权限..."
mkdir ubuntusrv && cd ubuntusrv
}
# 下载 Ubuntu ISO 镜像模块
download_iso() {
echo "正在下载 Ubuntu 22.04 LTS ISO 镜像..."
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso -O ubuntu.iso
}
# 创建虚拟硬盘模块
create_virtual_disk() {
echo "正在创建虚拟硬盘..."
qemu-img create -f qcow2 ubuntu.qcow2 10G
}
# 编写启动脚本模块
write_startup_script() {
echo "正在编写启动脚本..."
echo '#!/bin/bash' > start_vm.sh
echo 'qemu-system-x86_64 -hda ubuntu.qcow2 -cdrom ubuntu.iso -m 1G -boot d' >> start_vm.sh
}
# 赋予脚本执行权限模块
grant_script_permission() {
echo "正在赋予脚本执行权限..."
chmod +x start_vm.sh
}
# 启动虚拟机进行安装模块
start_installation() {
echo "正在启动虚拟机进行安装..."
./start_vm.sh
}
# 修改启动脚本以便后续从虚拟硬盘启动模块
modify_startup_script() {
echo "正在修改启动脚本以便后续从虚拟硬盘启动..."
echo '#!/bin/bash' > start_vm.sh
echo 'qemu-system-x86_64 -hda ubuntu.qcow2 -m 1G' >> start_vm.sh
}
# 主函数,按顺序调用各模块
main() {
setup_termux_storage
mkdir_dir
install_dependencies
download_iso
create_virtual_disk
write_startup_script
grant_script_permission
echo "请在启动的虚拟机中完成 Ubuntu 的安装过程..."
start_installation
read -p "安装完成后,请按任意键继续..." -n 1 -r
modify_startup_script
echo "Ubuntu 22.04 LTS 已经安装完成!现在您可以使用 start_vm.sh 脚本启动 Ubuntu 系统。"
}
# 执行主函数
main
Alpine Linue方式
pkg update -y && pkg upgrade -y
pkg install qemu-utils qemu-common qemu-system-x86_64-headless wget -y
mkdir alpine && cd alpine
wget http://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-virt-3.20.2-x86_64.iso
qemu-img create -f qcow2 alpine.img 5G
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -cdrom alpine-virt-3.20.2-x86_64.iso -nographic alpine.img
setup-interfaces
ifup eth0
wget https://raw.githubusercontent.com/cyberkernelofficial/docker-in-termux/main/answerfile
sed -i -E 's/(local kernel_opts)=.*/\1="console=ttyS0"/' /sbin/setup-disk
setup-alpine -f answerfile
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -nographic alpine.img
nano run_qemu.sh
#!/bin/bash
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 -drive if=pflash,format=raw,read-only=on,file=$PREFIX/share/qemu/edk2-x86_64-code.fd -netdev user,id=n1,dns=8.8.8.8,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 -nographic alpine.img
参考资料:
https://github.com/cyberkernelofficial/docker-in-termuxx
License:
CC BY 4.0