文章目录
abstract
-
本文在线链接: 国内用户快速部署Scoop@一键加速安装scoop@Deploy-ScoopForCNUser_scoop 安装-CSDN博客
-
适合中国用户一键部署加速过的scoop包管理器:scoop-cn/Deploy-ScoopForCNUser at master · xuchaoxin1375/scoop-cn (github.com)
-
脚本参考了多个相关的项目,做了整合,相关参考链接放到函数文档中
-
直奔本文重点请跳转到 [下载和安装脚本]一节
脚本说明
- 以下脚本对原脚本的扩展和改进,提供更多的灵活性和安装方案,以及更加详细的注释
- 对于某些精简版或修改版系统默认将用户权限提到Administrator的情况提供安装支持选项
- 关于脚本的稳定性和部署速度,这主要取决于加速镜像,
Get-AvailableGithubMirros
列出一些常见的镜像,它们当中在不同时段加速表现可能各不相同,如果你发现默认镜像或者你挑选的镜像加速效果不佳,那么请更换镜像
可能出现的报错问题👺
-
在更换镜像后,部署脚本重新执行可能会报错(也可能顺利执行),如果报错,可能是因为之前的错误或者不完整的安装执行操作污染了安装环境,可以尝试scoop清理缓存,提升到管理员权限等措施再重试安装
-
另一类报错是安装完毕而在使用过程中报错
-
其中gitee方案部分时候会报错,比如代理服务器代理过程中发生错误(500系列的错误),我们可以选择重试
PS> sudo pwsh -c scoop install gdb -g Installing 'gdb' (14.1) [64bit] from 'main' bucket proxy: https://nuwen.net/files/mingw/components-19.0.7z The remote server returned an error: (530) Server Error. URL https://nuwen.net/files/mingw/components-19.0.7z is not valid
PS> sudo pwsh -c scoop install gdb -g #自动清理之前的不成功安装 WARN Purging previous failed installation of gdb. ERROR 'gdb' isn't installed correctly. Removing older version (14.1). 'gdb' was uninstalled. Installing 'gdb' (14.1) [64bit] from 'main' bucket proxy: https://nuwen.net/files/mingw/components-19.0.7z components-19.0.7z (58.6 MB) [===================================================] 100% Checking hash of components-19.0.7z ... ok. Extracting components-19.0.7z ... done. Running pre_install script...done. Linking C:\ProgramData\scoop\apps\gdb\current => C:\ProgramData\scoop\apps\gdb\14.1 Creating shim for 'gdb'. Creating shim for 'gdbserver'. 'gdb' (14.1) was installed successfully!
还有其他类型的错误👺
下载阶段发生报错或失败
- 从默认bucket或者指定bucket下载失败,可以考虑更换其他bucket(如果其他bucket也有的话)
- 启用aria2下载可能会被拒绝,尤其还不恰当的aria2参数配置,可能导致下载出错,考虑禁用(可以临时禁用)掉aria2
- 中断和恢复
- 假设你的buckets中(可能是同一个bucket但是分别用不同的镜像加速成不同名字的bucket,例如
extras
,extras1
,extras2
,…)有多个提供了你想要的包Pkgx
.那么你可以从中选择一个或者默认不指定由scoop为你选择一个bucket下载并安装 - 这时候你可能发现它下载的比较慢或者不够快,于是你尝试手动指定bucket换一个下载来源,这种情况下建议第二次安装时使用
-g
选项,这样会忽略掉之前下载的部分,否则可能因为之前下载的文件因为打断有错误或者版本有差异导致aria2下不动它
- 假设你的buckets中(可能是同一个bucket但是分别用不同的镜像加速成不同名字的bucket,例如
下载成功但是安装时报错
- 未能够通过hash校验,可以尝试
scoop install
时重新下载-k
,或者跳过校验-s
选项 - 全局安装权限不足可能报错
- 安装过程中由于安装脚本和软件版本适配问题而报错,这种情况就比较复杂,考虑不用scoop安装,采用其他方式安装(这种情况比较少)
- 需要的bucket未安装,例如spc bucket中有个包
quarkpan
,但是安装的时候提示你没有aki
这个bucket,scoop提示你安装添加aki
bucket,我们可以网络搜scoop bucket add aki
,获取aki
链接(可以配合加速镜像),或者找国内的加速项目获取加速的链接,例如scoop bucket add aki https://gitee.com/scoop-installer/aki-apps
下载脚本
脚本版本更新
- 脚本版本说明(建议参考代码仓库以获取最新版本的部署脚本:PS/Deploy/deploy.psm1 · xuchaoxin1375/scripts - Gitee.com) 或者下载此文件导入到powershell后调用
- 相关基础软件的我建议用
scoop install -g
选项全局安装,让windows上的所有用户都可以使用而不需要重复安装
权限说明
- 通常普通权限用户就可以利用此脚本安装scoop
- 个别情况下会出现安装失败,那么请使用管理员身份启动一个powershell窗口,然后在其中运行此部署脚本
- 在管理员窗口下运行此脚本,脚本中提问你是否使用管理员权限安装时选择
y
才有效
- 在管理员窗口下运行此脚本,脚本中提问你是否使用管理员权限安装时选择
安装脚本👺
- 下载或者安装下面的脚本,然后用powershell执行(导入)
- 当然,您也可以直接复制下面的代码,然后粘贴到powershell中(推荐powershell v7+)
- 相关函数有多个,其中是
Deploy-ScoopForCNUser
是主函数 - 代码比较长,推荐到gitee下载最新版脚本文件使用,这里作为备用
$GithubMirrors = @(
# 注意,如果你的浏览器使用了代理,那么部分镜像站会和代理冲突,所以可能命令行中测试可以访问的链接在浏览器中确打不开镜像站,可以关闭代理或换个浏览器后重新验证该镜像站的可用性
'https://github.moeyy.xyz', # Moeyy - 提供 GitHub 文件的加速下载功能
'https://ghproxy.cc',
'https://ghproxy.net', # GitHub Proxy by GitHub99 - 提供 GitHub 文件的加速下载和克隆服务 #和用户自己的代理可能发生冲突
'https://mirror.ghproxy.com',
'https://gh.ddlc.top'
# 'https://github-mirror.us.kg',#请打开此网站找到可用的镜像站,直接使用此来链接不适合实际用途,仅允许小流量代理
# 'https://ghproxy.com/bad/demo'
'' #空字符串收尾
)
function Get-AvailableGithubMirrors
{
<#
.SYNOPSIS
列出流行的或可能可用的 GitHub 加速镜像站。
列表中的镜像站可能会过期,可用性不做稳定性和可用性保证。
.DESCRIPTION
推荐使用 aria2 等多线程下载工具来加速下载,让镜像加速效果更加明显。
.LINK
# 镜像站搜集和参考
https://github-mirror.us.kg/
#>
[CmdletBinding()]
param(
$mirrors = $GithubMirrors,
[switch]$ListView,
[switch]$PassThru,
[switch]$SkipCheckAvailability
)
# 定义镜像站列表
# $mirrors = @(
# 'https://mirror.ghproxy.com',
# 'https://ghproxy.cc',
# 'https://github.moeyy.xyz',
# 'https://github-mirror.us.kg',
# 'https://gh.ddlc.top'
# 'https://ghproxy.com/bad/demo'
# )
# 检查镜像站的可用性
Write-Host 'Checking available mirrors...'
$availableMirrors = $mirrors
# 存储可用的镜像列表
if (!$SkipCheckAvailability)
{
$availableMirrors = @()
foreach ($mirror in $mirrors)
{
# Write-Verbose "Testing $mirror..."
if (Test-MirrorAvailability -Url $mirror)
{
Write-Verbose "$mirror is available."
Write-Host "`t $mirror" -ForegroundColor Green
$availableMirrors += $mirror
}
else
{
Write-Verbose "$mirror is not available."
Write-Host "`t $mirror." -ForegroundColor Red
}
}
}
# 显示可用的镜像
Write-Host "`nAvailable mirrors:"
# 空白镜像保留
$availableMirrors = @('') + $availableMirrors
Write-Host ' 0: Use No Mirror' -NoNewline
$index = 1
$availableMirrors | ForEach-Object {
# $index = [array]::IndexOf($availableMirrors, $_)
# if($availableMirrors[$index] -eq ""){continue}
if ($_.Trim())
{
Write-Host " ${index}: $_" -NoNewline
$index += 1
}
Write-Host ''
}
if ($PassThru)
{
return $availableMirrors
}
}
function Test-MirrorAvailability
{
[CmdletBinding()]
param (
[string]$Url
)
try
{
# 使用 Invoke-WebRequest 检查可用性
$response = Invoke-WebRequest -Uri $Url -Method Head -TimeoutSec 5 -ErrorAction Stop
$availability = $response.StatusCode -eq 200
}
catch
{
$availability = $false
}
if ($VerbosePreference)
{
if ($availability)
{
Write-Host "Mirror $Url is available." -ForegroundColor Green
}
else
{
Write-Host "Mirror $Url is not available." -ForegroundColor Red
}
}
return $availability
}
function Get-SelectedMirror
{
[CmdletBinding()]
par