mirror of
https://github.com/MengMengCode/VoCat.git
synced 2026-08-20 14:53:42 +08:00
feat: add USB/PC/SC discovery support and an automated deployment installation script
This commit is contained in:
+23
-7
@@ -203,9 +203,14 @@ install_qmi_support() {
|
||||
|
||||
if is_openwrt && command -v opkg >/dev/null 2>&1; then
|
||||
opkg update >/dev/null 2>&1 || true
|
||||
if opkg_has_package libqmi; then
|
||||
opkg install libqmi >/dev/null 2>&1 || true
|
||||
local pkgs=""
|
||||
opkg_has_package qmi-utils && pkgs="$pkgs qmi-utils"
|
||||
opkg_has_package libqmi && pkgs="$pkgs libqmi"
|
||||
if [ -z "$pkgs" ]; then
|
||||
pkgs="qmi-utils libqmi"
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
opkg install $pkgs >/dev/null 2>&1 || true
|
||||
elif command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update -qq || true
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y libqmi-utils || true
|
||||
@@ -236,6 +241,7 @@ install_pcsc_support() {
|
||||
local packages=""
|
||||
opkg_has_package pcscd && packages="$packages pcscd"
|
||||
opkg_has_package ccid && packages="$packages ccid"
|
||||
opkg_has_package libccid && packages="$packages libccid"
|
||||
if [ -n "$packages" ]; then
|
||||
# shellcheck disable=SC2086
|
||||
opkg install $packages >/dev/null 2>&1 && installed=1 || true
|
||||
@@ -363,7 +369,7 @@ download_and_verify() {
|
||||
[ "$actual" = "$expected" ] || die "SHA-256 校验失败。" "SHA-256 verification failed."
|
||||
chmod 0755 "${VOCAT_TMP}/vocat"
|
||||
"${VOCAT_TMP}/vocat" version >/dev/null 2>&1 || die \
|
||||
"Downloaded binary cannot run on this system; keeping the installed version." \
|
||||
"下载的二进制文件无法在此系统上运行;未更改当前安装的版本。" \
|
||||
"The downloaded binary cannot run on this host; the installed version was not changed."
|
||||
}
|
||||
|
||||
@@ -392,8 +398,18 @@ INITIAL_ADMIN_PASSWORD=""
|
||||
bootstrap_admin() {
|
||||
local candidate="${1:-$BINARY_PATH}"
|
||||
local secret result
|
||||
secret=$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')
|
||||
[ -n "$secret" ] || die "Failed to generate a random secret." "Failed to generate a random secret."
|
||||
if command -v od >/dev/null 2>&1; then
|
||||
secret=$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')
|
||||
elif command -v hexdump >/dev/null 2>&1; then
|
||||
secret=$(hexdump -n 16 -e '16/1 "%02x"' /dev/urandom)
|
||||
elif command -v openssl >/dev/null 2>&1; then
|
||||
secret=$(openssl rand -hex 16 2>/dev/null || true)
|
||||
elif command -v sha256sum >/dev/null 2>&1; then
|
||||
secret=$(head -c 32 /dev/urandom | sha256sum | awk '{print substr($1, 1, 32)}')
|
||||
else
|
||||
secret=$(tr -dc 'a-f0-9' < /dev/urandom | head -c 32)
|
||||
fi
|
||||
[ -n "$secret" ] || die "生成随机密钥失败。" "Failed to generate a random secret."
|
||||
result=$(printf '%s\n' "$secret" | "$candidate" bootstrap-admin --database /opt/vocat/data/vocat.db --username admin) || \
|
||||
die \
|
||||
"待安装版本无法读取或升级现有数据库;当前程序尚未被替换,请检查数据库与版本兼容性。" \
|
||||
@@ -505,7 +521,7 @@ write_service() {
|
||||
write_openwrt_init
|
||||
return
|
||||
fi
|
||||
die "Unsupported service manager." "Neither systemd nor OpenWrt procd was detected."
|
||||
die "不支持的服务管理器。" "Neither systemd nor OpenWrt procd was detected."
|
||||
}
|
||||
|
||||
enable_and_start() {
|
||||
@@ -547,7 +563,7 @@ enable_and_start() {
|
||||
cp -a "${BINARY_PATH}.bak" "$BINARY_PATH"
|
||||
"$OPENWRT_INIT_PATH" restart || true
|
||||
fi
|
||||
die "OpenWrt vocat service failed to start." "The OpenWrt vocat service failed to start."
|
||||
die "OpenWrt vocat 服务启动失败。" "The OpenWrt vocat service failed to start."
|
||||
fi
|
||||
systemctl daemon-reload
|
||||
systemctl enable vocat
|
||||
|
||||
Reference in New Issue
Block a user