-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinit.sh
More file actions
111 lines (100 loc) · 4.06 KB
/
Copy pathinit.sh
File metadata and controls
111 lines (100 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/bin/busybox sh
# Cloud LTE OS 7.1.5 v8.2 init
/bin/busybox mount -t proc none /proc
/bin/busybox mount -t sysfs none /sys
/bin/busybox mount -t devtmpfs none /dev
/bin/busybox mount -t tmpfs none /tmp
/bin/busybox --install -s
# 确保关键目录存在
mkdir -p /proc /sys /dev /tmp /root /etc /usr/bin /var/log /var/cache/deep 2>/dev/null
/bin/busybox mount -t proc none /proc 2>/dev/null
/bin/busybox mount -t sysfs none /sys 2>/dev/null
/bin/busybox mount -t devtmpfs none /dev 2>/dev/null
/bin/busybox mount -t tmpfs none /tmp 2>/dev/null
# Console
for tty in /dev/ttyS0 /dev/tty1 /dev/console; do
[ -c "$tty" ] && exec < "$tty" > "$tty" 2>&1 && break
done
# ===== musl 运行时 (sqlite3/tcpdump 等动态包) =====
mkdir -p /lib 2>/dev/null
[ -f /usr/lib/musl/ld-musl-x86_64.so.1 ] && cp /usr/lib/musl/ld-musl-x86_64.so.1 /lib/ 2>/dev/null
export LD_LIBRARY_PATH=/usr/lib/musl
# ===== 系统稳定性 =====
# 1. swap 文件 (64MB, 防止 OOM) - 放 /tmp (tmpfs)
if [ ! -f /tmp/swapfile ]; then
dd if=/dev/zero of=/tmp/swapfile bs=1M count=64 2>/dev/null
chmod 600 /tmp/swapfile
mkswap /tmp/swapfile 2>/dev/null
swapon /tmp/swapfile 2>/dev/null && echo " ✅ swap 已启用 (64MB)"
fi
# 2. 日志轮转 (防止 /var/log 写满)
mkdir -p /var/spool/cron/crontabs 2>/dev/null
echo "0 3 * * * find /var/log -type f -size +1M -exec truncate -s 1M {} \\; 2>/dev/null" >> /etc/crontabs/root 2>/dev/null || true
echo "0 6 * * * echo -n > /var/log/*.log 2>/dev/null" >> /etc/crontabs/root 2>/dev/null || true
crond 2>/dev/null &
# 3. 清理临时文件
rm -rf /tmp/* 2>/dev/null
# Start networking (eth0 DHCP)
udhcpc -i eth0 -q -s /usr/share/udhcpc/default.script 2>/dev/null &
# ===== apt 支持 (Ubuntu chroot, 数据分区) =====
APT_ROOT=/opt/ubuntu-rootfs
mount_apt() {
# 找数据分区 (GPT p2, ext4)
for dev in /dev/sda2 /dev/vda2 /dev/nvme0n1p2 /dev/mmcblk0p2; do
[ -b "$dev" ] || continue
mkdir -p /mnt/data
mount "$dev" /mnt/data 2>/dev/null && {
echo " ✅ 数据分区已挂载: $dev"
# 安装 apt 命令 (首次)
if [ -f /mnt/data/apt/apt ] && [ ! -x /usr/bin/apt ]; then
cp /mnt/data/apt/apt /usr/bin/apt
ln -sf /usr/bin/apt /usr/bin/apt-get
chmod +x /usr/bin/apt
echo " ✅ apt 命令已安装 (Ubuntu 生态)"
fi
# 解压 Ubuntu rootfs (首次, 需内存 >256MB)
if [ -f /mnt/data/apt/ubuntu-rootfs.tar.gz ] && [ ! -d "$APT_ROOT/usr/bin" ]; then
RAM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
if [ "$RAM_KB" -gt 262144 ]; then
echo " 解压 Ubuntu rootfs (首次启动, 需 1-2 分钟)..."
mkdir -p "$APT_ROOT"
tar xzf /mnt/data/apt/ubuntu-rootfs.tar.gz -C / --strip-components=1 --wildcards 'cloudlte-ubuntu-rootfs/*' 2>/dev/null
echo " ✅ Ubuntu rootfs 就绪: apt install curl 可用"
else
echo " ⚠️ 内存不足 (<256MB), apt 需手动启用: apt shell"
fi
fi
return 0
}
done
echo " ⚠️ 未找到数据分区, apt 不可用 (deep 管理器正常)"
}
mount_apt
# Welcome screen
clear
echo ""
echo " ======================================="
echo " ☁️ Cloud LTE OS 7.1.5 v8.2"
echo " Linux from Scratch"
echo " WiFi + TUI + Swap + Logrotate"
echo " ======================================="
echo ""
echo " Commands:"
echo " menu - 系统管理面板"
echo " deep - 包管理器 (原生静态包)"
echo " apt - 包管理器 (Ubuntu 生态)"
echo " shell - 命令行"
echo ""
# 检查是不是交互终端
if [ -t 0 ] && [ -t 1 ]; then
echo -n "自动启动菜单 (3)..."
for i in 3 2 1; do
printf "\b\b\b\b\b\b\b\b\b\b\b\b(%ds) " $i
read -t 1 KEY 2>/dev/null && break
done
echo ""
[ "$KEY" = "shell" ] && exec /bin/sh
[ "$KEY" != "menu" ] && /usr/bin/menu 2>/dev/null
fi
echo "进入 shell (输入 menu 打开面板)"
exec /bin/sh