summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: eeccd506f4adac9ee9d45c5bb66103005358f3ae (plain)
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
# Maintainer: Pqolk <tiangloo@outlook.com>

pkgname=azurlaneautoscript
pkgver=2026.03.28
pkgrel=1
pkgdesc="Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界"
arch=('x86_64')
url="https://github.com/LmeSzinc/AzurLaneAutoScript"
license=('GPL3')
depends=(
  'android-tools'
  'git'
)
makedepends=(
  'expat' 'bzip2' 'gdbm' 'openssl' 'libffi' 'zlib' 'libnsl'
  'sqlite' 'mpdecimal' 'xz' 'tk'
)
options=(!debug !strip)
source=(
  "https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tar.xz"
)
sha512sums=(
            '86ba1c953e7b4bce70445d1616cc0d428b50937f6a874811584df8bf23c3e2ba3e5d48dec00e629a47f4216f3ca50dc5389cd485fbc315f51000d8750403b5f0')

build() {
    cd "${srcdir}"

    # 1. 编译 Python 3.7(静态链接,快速)
    tar -xf Python-3.7.17.tar.xz
    cd Python-3.7.17
    ./configure --prefix="${srcdir}/python37" --without-ensurepip
    make -j$(nproc)
    make install

    cd "${srcdir}"
    git clone "https://github.com/LmeSzinc/AzurLaneAutoScript.git" "${pkgname}"

    # 2. 创建虚拟环境(--copies 保证可移植,但标准库仍需 pyvenv.cfg 指向 home)
    cd "${srcdir}/${pkgname}"
    rm -rf "${srcdir}/venv"
    "${srcdir}/python37/bin/python3.7" -m venv --copies "${srcdir}/venv"
    source "${srcdir}/venv/bin/activate"

    # 3. 安装 pip 和项目依赖
    python -m ensurepip --upgrade
    pip install --upgrade --no-cache-dir pip
    sed -i '/^\s*av\s*==/d' deploy/docker/requirements.txt
    pip install --no-cache-dir -r deploy/docker/requirements.txt
    pip install --no-cache-dir mxnet-alas

    # 验证
    python -c "import rich" || { echo "ERROR: rich not installed"; exit 1; }
    deactivate

    # 清理字节码
    find "${srcdir}/venv" -type d -name "__pycache__" -exec rm -rf {} +
    find "${srcdir}/venv" -type f -name "*.pyc" -delete
}

package() {
    cd "${srcdir}"

    # 1. 安装整个 python37 基础解释器(提供标准库)
    install -dm755 "${pkgdir}/opt/${pkgname}/python37"
    cp -a python37/* "${pkgdir}/opt/${pkgname}/python37"

    # 2. 安装应用代码
    install -dm755 "${pkgdir}/opt/${pkgname}/app"
    cp -a "${pkgname}/." "${pkgdir}/opt/${pkgname}/app"

    # 3. 安装虚拟环境
    cp -a venv "${pkgdir}/opt/${pkgname}/venv"

    # 4. 修正虚拟环境的路标文件 pyvenv.cfg,让解释器找到标准库
    sed -i "s|home = .*|home = /opt/${pkgname}/python37|" \
        "${pkgdir}/opt/${pkgname}/venv/pyvenv.cfg"

    # 5. 修正 activate 脚本中的 VIRTUAL_ENV
    sed -i "s|VIRTUAL_ENV=.*|VIRTUAL_ENV=\"/opt/${pkgname}/venv\"|" \
        "${pkgdir}/opt/${pkgname}/venv/bin/activate"

    # 6. 确保权限
    chmod -R u+rwX,go+rX,go-w "${pkgdir}/opt/${pkgname}"

    # 7. 配置文件
    cp "${pkgdir}/opt/${pkgname}/app/config/deploy.template-linux.yaml" \
       "${pkgdir}/opt/${pkgname}/app/config/deploy.yaml"
    install -dm755 "${pkgdir}/etc/${pkgname}"
    ln -sf "/opt/${pkgname}/app/config/alas.json" "${pkgdir}/etc/${pkgname}/alas.json"
    ln -sf "/opt/${pkgname}/app/config/deploy.yaml" "${pkgdir}/etc/${pkgname}/deploy.yaml"

    # 8. 启动脚本
    install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${pkgname}" <<'EOF'
#!/bin/bash
source /opt/azurlaneautoscript/venv/bin/activate
exec python /opt/azurlaneautoscript/app/gui.py "$@"
EOF
    # 9. 系统服务
    install -Dm644 /dev/stdin "${pkgdir}/usr/lib/systemd/system/${pkgname}.service" <<'EOF'
[Unit]
Description=AzurLaneAutoScript Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/azurlaneautoscript
Restart=on-failure

# 限制写入权限
#ProtectSystem=strict
#ReadWritePaths=/opt/azurlaneautoscript /tmp /var/tmp /usr/bin/azurlaneautoscript

# 限制服务运行的文件系统访问
#ProtectHome=true
#NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

EOF

}