From 06d881457388c36baed8d047dd298bcc283a701f Mon Sep 17 00:00:00 2001 From: Kirikaze Chiyuki Date: Wed, 22 May 2024 20:37:59 +0800 Subject: [PATCH] [fix] bwrap flags & wait slirp to launch --- .SRCINFO | 6 +++--- PKGBUILD | 6 +++--- _start.sh | 7 ++++--- start.sh | 55 +++++++++++++++++++++++++++++++------------------------ 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/.SRCINFO b/.SRCINFO index 13ab28931033..a8b37d647d80 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = linuxqq-nt-bwrap pkgdesc = New Linux QQ based on Electron, with bubblewrap sandbox and some tweaks pkgver = 3.2.8_23873 - pkgrel = 3 + pkgrel = 4 url = https://im.qq.com/linuxqq/index.shtml install = linuxqq-nt-bwrap.install arch = x86_64 @@ -38,8 +38,8 @@ pkgbase = linuxqq-nt-bwrap source = config.json source = resolv.conf source = xdg-open.sh - sha256sums = b80f808b69a930f49a0a59e5441abfa920e302caa30d87e0053a1420e1719b91 - sha256sums = 0215ba3592428a1bd351181436fc8ae5462c841132169d3420a6676a13c43449 + sha256sums = 92f5cd9f279dd998af3cd63643aa8591bed8afd203dff09ae518417a965d2c38 + sha256sums = 3c78b576aa5d07e4cacde95d1088530503478bb0d43d19371c5da56f675d9861 sha256sums = bb2ec0f104da4da7422d9b0f51c71d0ab38ed2a21764a7a643ab42689e098e4b sha256sums = cc002ee0eb2e8702c97d16f4ce628841cd5fe10195875a075432e92248741424 sha256sums = f1c778b5a8b23bc77fd8e5e89056fea07309794c9a44ec38134a176cf1f7b675 diff --git a/PKGBUILD b/PKGBUILD index 9e1b5599b300..8f3003c5ef47 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -7,7 +7,7 @@ _update_pkgver=${_base_pkgver} _md5=96fbb21f pkgname=linuxqq-nt-bwrap pkgver="${_update_pkgver//-/_}" -pkgrel=3 +pkgrel=4 pkgdesc="New Linux QQ based on Electron, with bubblewrap sandbox and some tweaks" arch=('x86_64' 'aarch64' 'loong64') url='https://im.qq.com/linuxqq/index.shtml' @@ -29,8 +29,8 @@ source_x86_64=("https://dldir1.qq.com/qqfile/qq/QQNT/${_md5}/linuxqq_${_base_pkg source_aarch64=("https://dldir1.qq.com/qqfile/qq/QQNT/${_md5}/linuxqq_${_base_pkgver}_arm64.deb") source_loong64=("https://dldir1.qq.com/qqfile/qq/QQNT/${_md5}/linuxqq_${_base_pkgver}_loongarch64.deb") source=('start.sh' '_start.sh' 'config.json' 'resolv.conf' 'xdg-open.sh') -sha256sums=('b80f808b69a930f49a0a59e5441abfa920e302caa30d87e0053a1420e1719b91' # start.sh - '0215ba3592428a1bd351181436fc8ae5462c841132169d3420a6676a13c43449' # _start.sh +sha256sums=('92f5cd9f279dd998af3cd63643aa8591bed8afd203dff09ae518417a965d2c38' # start.sh + '3c78b576aa5d07e4cacde95d1088530503478bb0d43d19371c5da56f675d9861' # _start.sh 'bb2ec0f104da4da7422d9b0f51c71d0ab38ed2a21764a7a643ab42689e098e4b' # config.json 'cc002ee0eb2e8702c97d16f4ce628841cd5fe10195875a075432e92248741424' # resolv.conf 'f1c778b5a8b23bc77fd8e5e89056fea07309794c9a44ec38134a176cf1f7b675') # xdg-open.sh diff --git a/_start.sh b/_start.sh index 43d1d068fa0b..d40a92e138cb 100755 --- a/_start.sh +++ b/_start.sh @@ -3,12 +3,13 @@ trap 'kill $(jobs -p)' EXIT -echo $$ > ${INFO_FILE} +echo $$ > "${INFO_FILE}" +echo "PID written." + # wait for the file to be deleted -while [ -f ${INFO_FILE} ]; do +while [ -f "${INFO_FILE}" ]; do sleep 0.01 done -sleep 0.01 # clear proxy settings unset http_proxy unset https_proxy diff --git a/start.sh b/start.sh index a2552dba777e..5f4509c1074a 100755 --- a/start.sh +++ b/start.sh @@ -43,13 +43,12 @@ fi # 从 flags 文件中加载参数 set -euo pipefail + electron_flags_file="${XDG_CONFIG_HOME}/qq-electron-flags.conf" declare -a electron_flags - if [[ -f "${electron_flags_file}" ]]; then mapfile -t ELECTRON_FLAGS_MAPFILE <"${electron_flags_file}" fi - for line in "${ELECTRON_FLAGS_MAPFILE[@]}"; do if [[ ! "${line}" =~ ^[[:space:]]*#.* ]]; then electron_flags+=("${line}") @@ -58,17 +57,18 @@ done bwrap_flags_file="${XDG_CONFIG_HOME}/qq-bwrap-flags.conf" declare -a bwrap_flags - if [[ -f "${bwrap_flags_file}" ]]; then - mapfile -t BWRAP_FLAGS_MAPFILE <"${bwrap_flags_file}" + while IFS= read -r line; do + if [[ ! "${line}" =~ ^[[:space:]]*# ]] && [[ -n "${line}" ]]; then + eval "expanded_line=\"$line\"" + read -ra parts <<< "$expanded_line" + for part in "${parts[@]}"; do + bwrap_flags+=("$part") + done + fi + done < "${bwrap_flags_file}" fi -for line in "${BWRAP_FLAGS_MAPFILE[@]}"; do - if [[ ! "${line}" =~ ^[[:space:]]*#.* ]]; then - bwrap_flags+=("${line}") - fi -done - # read the mac address from .qq_mac, if not exist, generate a random one if [ -f "${QQ_APP_DIR}/.qq_mac" ]; then @@ -114,7 +114,6 @@ fi INFO_DIR=$(mktemp -d) INFO_FILE=$INFO_DIR/info -touch $INFO_FILE bwrap --new-session --unshare-user-try --unshare-cgroup-try \ --unshare-user \ @@ -162,24 +161,30 @@ bwrap --new-session --unshare-user-try --unshare-cgroup-try \ "${bwrap_flags[@]}" \ /opt/QQ/_start.sh "${electron_flags[@]}" "$@" /opt/QQ/resources/app & -if [ $? -ne 0 ]; then - rm $INFO_FILE +if [ "$?" -ne 0 ]; then + rm "$INFO_FILE" echo "bwrap failed" exit 1 fi -while [ ! -s $INFO_FILE ]; do +while [ ! -s "$INFO_FILE" ]; do sleep 0.01 done -PID=$(cat $INFO_FILE) + +PID="$(cat "$INFO_FILE")" echo "SubProcess PID: $PID" SLIRP_API_SOCKET=$INFO_DIR/slirp.sock -slirp4netns --configure --mtu=65520 --disable-host-loopback --enable-ipv6 $PID eth0 --macaddress $qq_mac --api-socket $SLIRP_API_SOCKET & +slirp4netns --configure --mtu=65520 --disable-host-loopback --enable-ipv6 "$PID" eth0 --macaddress "$qq_mac" --api-socket "$SLIRP_API_SOCKET" & SLIRP_PID=$! -if [ $? -ne 0 ]; then + +while [ ! -S "$SLIRP_API_SOCKET" ]; do + sleep 0.01 +done + +if [ "$?" -ne 0 ]; then echo "slirp4netns failed" - kill $PID - rm -rf ${INFO_DIR:?} + kill "$PID" + rm -rf "${INFO_DIR:?}" exit 1 fi add_hostfwd() { @@ -201,10 +206,12 @@ https_ports=(4301 4303 4305 4307 4309) http_ports=(4310 4308 4306 4304 4302) add_hostfwd "tcp" 94301 "${https_ports[@]}" add_hostfwd "tcp" 94310 "${http_ports[@]}" -rm $INFO_FILE +rm "$INFO_FILE" # 启动步骤结束 -tail --pid=$PID -f /dev/null -kill -TERM $SLIRP_PID -# wait $SLIRP_PID -rm -rf ${INFO_DIR:?} +tail --pid="$PID" -f /dev/null +echo "Cleaning up..." +set +e +kill -TERM "$SLIRP_PID" +wait "$SLIRP_PID" +rm -rf "${INFO_DIR:?}" exit 0