mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 01:10:16 +08:00
fix(aptss): 添加aptss命令存在性检查并支持apm更新
在运行aptss相关操作前检查命令是否存在,避免错误执行 同时添加对apm命令的支持,当aptss不存在时尝试使用apm更新
This commit is contained in:
@@ -16,6 +16,15 @@ aptssUpdater::aptssUpdater(QWidget *parent)
|
|||||||
QStringList aptssUpdater::getUpdateablePackages()
|
QStringList aptssUpdater::getUpdateablePackages()
|
||||||
{
|
{
|
||||||
QStringList packageDetails;
|
QStringList packageDetails;
|
||||||
|
|
||||||
|
// 检查aptss命令是否存在
|
||||||
|
QProcess checkProcess;
|
||||||
|
checkProcess.start("which", QStringList() << "aptss");
|
||||||
|
if (!checkProcess.waitForFinished(5000) || checkProcess.exitCode() != 0) {
|
||||||
|
qDebug() << "aptss命令不存在,跳过Spark更新检查";
|
||||||
|
return packageDetails;
|
||||||
|
}
|
||||||
|
|
||||||
QProcess process;
|
QProcess process;
|
||||||
QString command = R"(env LANGUAGE=en_US /usr/bin/apt -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf list --upgradable -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/aptss.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk 'NR>1')";
|
QString command = R"(env LANGUAGE=en_US /usr/bin/apt -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf list --upgradable -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/aptss.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk 'NR>1')";
|
||||||
|
|
||||||
|
|||||||
@@ -313,33 +313,76 @@ void MainWindow::filterAppsByKeyword(const QString &keyword)
|
|||||||
|
|
||||||
void MainWindow::runAptssUpgrade()
|
void MainWindow::runAptssUpgrade()
|
||||||
{
|
{
|
||||||
QProcess process;
|
// 检查aptss命令是否存在
|
||||||
|
QProcess checkProcess;
|
||||||
|
checkProcess.start("which", QStringList() << "aptss");
|
||||||
|
if (checkProcess.waitForFinished(5000) && checkProcess.exitCode() == 0) {
|
||||||
|
// aptss存在,执行aptss ssupdate
|
||||||
|
QProcess process;
|
||||||
|
|
||||||
// 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo
|
// 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo
|
||||||
if (geteuid() == 0) {
|
if (geteuid() == 0) {
|
||||||
// root用户直接执行
|
// root用户直接执行
|
||||||
process.start("aptss", QStringList() << "ssupdate");
|
process.start("aptss", QStringList() << "ssupdate");
|
||||||
|
} else {
|
||||||
|
// 非root用户使用sudo
|
||||||
|
process.start("sudo", QStringList() << "aptss" << "ssupdate");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!process.waitForStarted(5000)) {
|
||||||
|
QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
process.write("n\n");
|
||||||
|
process.closeWriteChannel();
|
||||||
|
|
||||||
|
// 设置超时时间,避免无限等待
|
||||||
|
if (!process.waitForFinished(30000)) { // 30秒超时
|
||||||
|
qDebug() << "aptss ssupdate 执行超时";
|
||||||
|
process.kill(); // 强制终止进程
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.exitCode() != 0) {
|
||||||
|
QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非root用户使用sudo
|
qDebug() << "aptss命令不存在,跳过aptss ssupdate";
|
||||||
process.start("sudo", QStringList() << "aptss" << "ssupdate");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process.waitForStarted(5000)) {
|
// 检查apm命令是否存在,如果存在则执行apm update
|
||||||
QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate");
|
QProcess checkApmProcess;
|
||||||
return;
|
checkApmProcess.start("which", QStringList() << "apm");
|
||||||
}
|
if (checkApmProcess.waitForFinished(5000) && checkApmProcess.exitCode() == 0) {
|
||||||
process.write("n\n");
|
qDebug() << "apm命令存在,执行apm update";
|
||||||
process.closeWriteChannel();
|
QProcess apmProcess;
|
||||||
|
|
||||||
// 设置超时时间,避免无限等待
|
// 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo
|
||||||
if (!process.waitForFinished(30000)) { // 30秒超时
|
if (geteuid() == 0) {
|
||||||
qDebug() << "aptss ssupdate 执行超时";
|
// root用户直接执行
|
||||||
process.kill(); // 强制终止进程
|
apmProcess.start("apm", QStringList() << "update");
|
||||||
return;
|
} else {
|
||||||
}
|
// 非root用户使用sudo
|
||||||
|
apmProcess.start("sudo", QStringList() << "apm" << "update");
|
||||||
|
}
|
||||||
|
|
||||||
if (process.exitCode() != 0) {
|
if (!apmProcess.waitForStarted(5000)) {
|
||||||
QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。");
|
qDebug() << "无法启动 apm update";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置超时时间,避免无限等待
|
||||||
|
if (!apmProcess.waitForFinished(30000)) { // 30秒超时
|
||||||
|
qDebug() << "apm update 执行超时";
|
||||||
|
apmProcess.kill(); // 强制终止进程
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apmProcess.exitCode() != 0) {
|
||||||
|
qDebug() << "执行 apm update 失败";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qDebug() << "apm命令不存在,跳过apm update";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void MainWindow::closeEvent(QCloseEvent *event)
|
void MainWindow::closeEvent(QCloseEvent *event)
|
||||||
|
|||||||
Reference in New Issue
Block a user