-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharch_init.sh
More file actions
executable file
·173 lines (139 loc) · 4.33 KB
/
Copy patharch_init.sh
File metadata and controls
executable file
·173 lines (139 loc) · 4.33 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/bash
# Arch Linux 初始化脚本
# 用于在 Podman 容器内以 hook 或手动方式运行
# 功能:更新镜像源、添加 archlinuxcn 源、安装 yay、安装开发包
set -e
set -u
# ===== 颜色定义 =====
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
NC='\033[0m'
# ===== 默认配置 =====
# USTC 镜像
MIRROR_USTC="https://mirrors.ustc.edu.cn/archlinux/\$repo/os/\$arch"
ARCHLINUXCN_USTC="https://mirrors.ustc.edu.cn/archlinuxcn/\$arch"
# 开发包列表
DEV_PACKAGES=(
base-devel
neovim
ripgrep
fd
fzf
jq
cmake
make
clang
python
)
# ===== 辅助函数 =====
info() { echo -e "${BLUE}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
err() { echo -e "${RED}[ERR]${NC} $*" >&2; }
# ===== 检查 root 权限 =====
check_root() {
if [[ $EUID -ne 0 ]]; then
err "此脚本需要 root 权限运行"
exit 1
fi
ok "root 权限检查通过"
}
# ===== 配置 pacman 镜像源 =====
setup_mirrors() {
info "配置 pacman 镜像源(中科大)..."
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak 2>/dev/null || true
cat > /etc/pacman.d/mirrorlist << 'EOF'
## China - USTC
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
## 备用源
## China - TUNA
# Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
## China - 163
# Server = https://mirrors.163.com/archlinux/$repo/os/$arch
EOF
ok "镜像源已更新为 USTC"
# 优化 pacman.conf
info "优化 pacman 配置..."
sed -i \
-e "/^#Color/c\Color\nILoveCandy" \
-e "/^#VerbosePkgLists/c\VerbosePkgLists" \
-e "/^#ParallelDownloads/c\ParallelDownloads = 10" \
/etc/pacman.conf 2>/dev/null || true
ok "pacman 配置已优化"
}
# ===== 添加 archlinuxcn 源 =====
setup_archlinuxcn() {
info "添加 archlinuxcn 源..."
cat >> /etc/pacman.conf << 'EOF'
[archlinuxcn]
# 容器内跳过签名验证,避免 PGP key 服务器不可达导致安装失败
# 如需开启,将下方改为 SigLevel = Optional TrustedOnly
SigLevel = Never
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
EOF
ok "archlinuxcn 源已添加"
info "更新软件包列表并安装 archlinuxcn-keyring..."
pacman -Sy --noconfirm
pacman -S --noconfirm archlinuxcn-keyring
# 尝试导入 keyring(失败不影响后续安装)
pacman-key --populate archlinuxcn 2>/dev/null || true
ok "archlinuxcn 源配置完成"
ok "archlinuxcn 源配置完成"
}
# ===== 安装 yay =====
install_yay() {
info "安装 yay..."
pacman -S --noconfirm yay
ok "yay 已安装"
}
# ===== 安装开发包 =====
install_dev_packages() {
info "安装开发必备软件包..."
warn "即将安装 ${#DEV_PACKAGES[@]} 个软件包,总大小可能较大"
pacman -S --noconfirm --needed "${DEV_PACKAGES[@]}"
ok "开发包已安装完成"
}
# ===== 配置 locale/timezone =====
setup_locale() {
info "配置本地化设置..."
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 2>/dev/null || true
sed -i 's/^#en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen
sed -i 's/^#zh_CN.UTF-8/zh_CN.UTF-8/' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
ok "本地化设置完成"
}
# ===== 主流程 =====
main() {
echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE} Arch Linux 开发环境初始化${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""
check_root
setup_mirrors
setup_archlinuxcn
install_yay
install_dev_packages
setup_locale
echo ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN} Arch Linux 开发环境初始化完成!${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
echo " yay: 已安装"
echo " 注意: archlinuxcn 源当前 SigLevel=Never(容器内免签名验证)"
echo "============================================"
}
# ===== 入口 =====
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
cat <<EOF
用法: $0
Arch Linux 容器初始化脚本,以 root 运行。
自动配置 USTC 镜像源、archlinuxcn 源、安装 yay 和开发包。
EOF
exit 0
fi
main