You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL中安装Ruby及one_gadget(gem扩展)失败的解决求助

问题描述

因Pwnable需求,需在WSL中安装Ruby并通过gem安装one_gadget扩展,但执行sudo apt install ruby时出现Snap相关错误,错误输出如下:

The following additional packages will be installed:
  fonts-lato libgmp-dev libgmpxx4ldbl libruby3.0 rake ri ruby ruby-dev ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0 ruby3.0-dev ruby3.0-doc
  rubygems-integration unzip zip
Suggested packages:
  gmp-doc libgmp10-doc libmpfr-dev bundler
E: Sub-process [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true returned an error code (100)
E: Failure running hook [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true
E: Sub-process [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true returned an error code (100)
E: Failure running hook [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true

再次执行sudo apt install ruby仍出现相同错误:

# sudo apt install ruby
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fonts-lato libruby3.0 rake ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0 rubygems-integration unzip zip
Suggested packages:
  ri ruby-dev bundler
E: Sub-process [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true returned an error code (100)
E: Failure running hook [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true
E: Sub-process [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true returned an error code (100)
E: Failure running hook [ ! -f /usr/bin/snap ] || /usr/bin/snap advise-snap --from-apt 2>/dev/null || true
解决方法

一、修复apt的Snap钩子错误

该错误由apt的Snap建议钩子执行失败导致,按以下步骤处理:

  1. 检查Snap状态:
    which snap
    
    • 若输出为空(未安装Snap),直接执行下一步;
    • 若存在Snap,先重启服务:
      sudo systemctl restart snapd.service
      
  2. 临时禁用Snap钩子:
    sudo sed -i 's/^APT::Update::Pre-Invoke/#APT::Update::Pre-Invoke/' /etc/apt/apt.conf.d/20snapd.conf
    sudo sed -i 's/^DPkg::Pre-Install-Pkgs/#DPkg::Pre-Install-Pkgs/' /etc/apt/apt.conf.d/20snapd.conf
    
  3. 重新安装Ruby:
    sudo apt update && sudo apt install ruby -y
    
  4. (可选)安装完成后恢复钩子:
    sudo sed -i 's/^#APT::Update::Pre-Invoke/APT::Update::Pre-Invoke/' /etc/apt/apt.conf.d/20snapd.conf
    sudo sed -i 's/^#DPkg::Pre-Install-Pkgs/DPkg::Pre-Install-Pkgs/' /etc/apt/apt.conf.d/20snapd.conf
    

二、其他安装one_gadget的方式

方式1:使用预编译二进制文件

直接下载编译好的二进制包,无需安装Ruby:

# 替换为最新版本的下载链接
wget https://github.com/david942j/one_gadget/releases/download/v1.8.0/one_gadget-linux-amd64.tar.gz
tar -xzf one_gadget-linux-amd64.tar.gz
sudo mv one_gadget /usr/local/bin/
# 验证安装
one_gadget --version

方式2:用rbenv安装Ruby(绕过apt问题)

rbenv是Ruby版本管理工具,可避免apt的Snap冲突:

  1. 安装依赖:
    sudo apt update && sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev -y
    
  2. 安装rbenv:
    curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
    
  3. 配置shell环境:
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    source ~/.bashrc
    
  4. 安装Ruby并设置全局版本:
    rbenv install 3.2.2
    rbenv global 3.2.2
    
  5. 安装one_gadget:
    gem install one_gadget
    

内容的提问来源于stack exchange,提问作者김준원

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:57:28