50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
|
|
package soft
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"sunhpc/internal/log"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// InstallContext 安装上下文,包含所有命令行参数
|
|||
|
|
type InstallContext struct {
|
|||
|
|
Force bool // 强制安装
|
|||
|
|
DryRun bool // 干运行模式
|
|||
|
|
KeepSource bool // 保留源码文件
|
|||
|
|
Jobs int // 编译线程数
|
|||
|
|
Offline bool // 离线模式
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// InstallFromSource 从源码编译安装
|
|||
|
|
func InstallFromSource(name, srcPath, prefix, version string, ctx *InstallContext) error {
|
|||
|
|
log.Infof("正在从源码安装 %s,路径: %s", name, srcPath)
|
|||
|
|
if ctx != nil && ctx.DryRun {
|
|||
|
|
log.Infof("[干运行] 将执行: configure && make -j%d && make install", ctx.Jobs)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
// TODO: 实现具体逻辑:下载、解压、./configure、make、make install
|
|||
|
|
log.Info("源码安装模拟完成(需实现具体步骤)")
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// InstallFromBinary 从二进制压缩包安装
|
|||
|
|
func InstallFromBinary(name, binPath, prefix string, ctx *InstallContext) error {
|
|||
|
|
log.Infof("正在安装二进制包 %s,路径: %s", name, binPath)
|
|||
|
|
if ctx != nil && ctx.DryRun {
|
|||
|
|
log.Infof("[干运行] 将解压 %s 到 %s", binPath, prefix)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
// TODO: 解压到 prefix
|
|||
|
|
log.Info("二进制安装模拟完成(需实现具体步骤)")
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// InstallFromPackage 通过系统包管理器安装
|
|||
|
|
func InstallFromPackage(name, pkgType string, ctx *InstallContext) error {
|
|||
|
|
log.Infof("正在通过包管理器安装 %s (%s)", name, pkgType)
|
|||
|
|
if ctx != nil && ctx.DryRun {
|
|||
|
|
log.Infof("[干运行] 将执行包管理器安装 %s", name)
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
// 具体实现在下面的 package.go 中
|
|||
|
|
return installViaPackageManager(name, pkgType)
|
|||
|
|
}
|