数字内容安全实验(五)环境配置问题的解决

前言

过时的python版本、过时的程序、过时的下载链接——这就是数字内容安全实验五。

被数字内容安全实验五的环境搭建部分折磨一整天后,终于把遇到的问题一一解决。
为什么网安没有数字内容安全?希望下学期的网络安全治理给点力吧……
为了不让同学/学弟学妹们被正常教学课程实验本不该出现的版本、过时问题,无缘无故浪费时间和精力,在此写一篇文章讲讲这些问题是如何解决的。

环境搭建

项目准备

主机环境:ubuntu22.04 LTS(VMware虚拟机)

项目的地址:https://github.com/liuyanqi/bitright
一看是五年前的老项目,就有点害怕…

直接git clone到~目录:

1
git clone https://github.com/liuyanqi/bitright.git

文件Installation Guide.txt的指导

如果是第一次运行:依次执行这两条命令

1
2
source ./install.sh
python network.py

如果是后续的运行:执行这一条命令

1
source ./run.sh

其实如果完全按照这个Guide执行两个脚本,绝大多数电脑(尤其是python3版本在3.10)都会遇到一堆报错,而且十分零碎,很难解决。
究其最根本的原因,还是所需python版本的问题。包括安装环境所需的python版本过时、运行程序所需的python版本过时,等等。

source ./install.sh命令

打开install.sh:

分成三个步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
!/bin/bash

# 安装virtualenv并开启虚拟环境
pip install virtualenv
virtualenv env
cd env
source bin/activate

# 安装requirement.txt上的程序
pip install -r ../requirements.txt

# 解压并安装tlsh
wget https://bitright.sfo2.digitaloceanspaces.com/tlsh.zip
unzip tlsh.zip
cd tlsh/py_ext
python setup.py install

cd ../../..

最关键的就是这个install.sh的过程,我们分开说。

安装virtualenv并开启虚拟环境

先了解一下virtualenv是干什么的:
全网最最最详细的virtualenv的使用命令详解_virtualenv命令
关键信息:

  • 使用virtualenv可以创建一个隔离的Python环境
  • 如果你的系统上安装了多个版本的Python,可以指定使用特定版本的Python创建虚拟环境

所以说install.sh中的第一部分:

1
2
3
4
5
# 安装virtualenv并开启虚拟环境
pip install virtualenv
virtualenv env
cd env
source bin/activate

作用就是:安装virtualenv并开启env虚拟环境
但是如果你此前运行过install.sh,就会发现此处env的激活命令,就是使用你安装的默认的python版本,也就是说如果你的系统的python3版本是python3.10,env就会创建python3.10的环境。

这样就肯定会产生报错,如果你在执行install.sh的过程中,遇到了诸如”Could not build wheels for Pillow, scikit-image, scipy“这种报错——问题就出于此处的版本设置。

  • 注:如果你想知道为什么这个报错是由于版本不兼容,可以查看此处的解释. 当然,也可以直接继续下面的内容。

我们注意到:

”如果你的系统上安装了多个版本的Python,可以指定使用特定版本的Python创建虚拟环境。“

所以说如果你想要换python虚拟环境的版本,还要在系统上安装相应版本的Python,这显然非常繁琐,经过一番寻找,发现了完美的替代——Anaconda.

将Virtualenv换成Anaconda

如果激活了env环境
先关闭env环境:

1
decativate

然后直接删除./env目录即可:

1
rm -rf ~/bitright/env

接下来安装Anaconda
关于Anaconda的安装及配置,详见:
【Conda】超详细的linux-conda环境安装教程_linux安装conda-CSDN博客
篇幅有限,只介绍安装后的使用。
成功配置后,你可以看到(base)字样:

直接创建虚拟环境:

1
conda create -n python36 python3.6

其中的python36是你设置的环境名称。

  • 如果这一步无法进行,试试conda换源。==实测将~/.condarc改为以下内容就可以==:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    channels:
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    show_channel_urls: true

    ssl_verify: true
    allow_conda_downgrades: true

然后执行命令开启虚拟环境:

1
2
conda init
conda activate python36

看到在终端界面带有(python36)的字样,执行命令:

1
type python3

说明环境已经激活完成。

安装requirement.txt上的程序

install.sh的第二部分是安装requirement.txt上的程序。
打开requirement.txt:

可以看到需要用pip安装的程序及其版本。
直接运行命令:

1
pip install -r requirement.txt

所需程序被一一安装。
注意:如果这时候安装进度条是彩色的,说明python3.6的环境并没有真正启动,需要重新启动conda环境。正常情况下,安装进度条应该是白色的如下图:

报错情况及处理

如果安装image-match时遇到报错:

1
ERROR: Could not find a version that satisfies the requirement pytest-runner (from versions: none)

直接安装pytest-runner即可:

1
pip install pytest-runner

同样地,如果安装scikit-image时遇到报错:

1
2
ERROR: Could not find a version that satisfies the requirement cython>=0.21 (from versions: none)
ERROR: No matching distribution found for cython>=0.21

直接安装cython即可:

1
pip install cython

如果报错:

按照说明,安装numpy即可:

1
pip install numpy

如果报错:

1
RuntimeError: Broken toolchain: cannot link a simple C program


一般是安装numpy时缺少gcc导致的,直接安装即可:

1
sudo apt-get install gcc

遇到报错,修复完成后,重新运行pip install -r requirements.txt,再根据情况进行修复……这样一遍遍运行,耐心等待,到最后肯定可以顺利完成。
附上安装完成截图:

解压并安装tlsh

1
2
3
4
wget https://bitright.sfo2.digitaloceanspaces.com/tlsh.zip
unzip tlsh.zip
cd tlsh/py_ext
python setup.py install

这一步依旧是巨坑。运行过install.sh的同学肯定清楚,这里运行结果如图:

完全无法找到https://bitright.sfo2.digitaloceanspaces.com/tlsh.zip 里的文件。
依旧是过时的问题。
所以我们不能从他提供的网站里下载和安装tlsh.zip
求助搜索引擎:

原项目地址:trendmicro/tlsh (github.com)
根据原项目的安装教程,我们首先下载并解压文件:

1
2
3
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip
unzip master.zip
cd tlsh-master

然后再执行编译安装脚本:

1
sudo ./make.sh
  • 注意:此处需要你预先安装cmake,如果执行不成功,大概率是你还没有安装cmake:
    1
    2
    3
    sudo apt install cmake
    sudo apt install gcc
    sudo apt install g++

编译完成

然后安装py-tlsh包:

1
pip install py-tlsh

至此tlsh也成功安装。

运行network.py

在执行完source ./install.sh后,接下来就是:

1
python network.py

如果报错如:

直接安装:

1
pip install pyacoustid

同样地,后续缺少什么module就pip下载对应的包,再重新python network.py即可。
如果遇到了这个报错:

1
TypeError: __init__() got an unexpected keyword argument 'winmode'


可以看到,问题出在chromaprint上。
我们直接重新安装一下chromaprint即可:

1
pip install chromaprint

安装所有所需模块后,再执行python network.py 正常情况下即可成功启动。

  • 注:关于报错“TypeError: init() got an unexpected keyword argument ‘winmode’”的详细解释,可以看这里。当然不看也不影响后续的过程


在虚拟机本机的浏览器中输入http://127.0.0.1:8000/ 并进入,或者直接在终端中打开链接:

可以看到页面正常显示。此时你可以执行后续上传文件等操作,功能均正常。
可能速度会很慢,耐心等待。如果太慢或者无响应,就在终端Ctrl+C终止程序,再重新python network.py试试。

如果速度实在慢到无法忍受的话,我推荐你使用WSL2的ubuntu系统,而不是VMware workstation. 换成WSL的话,速度会变快很多倍,但是需要在WSL上面再配置一遍环境,不过WSL真的很好用……

另外,实验所需上传的文件就在~/.bitright/media目录里,尽情使用它们吧
至此,所有因为实验材料过时引发的不必要的问题已经解决。你可以继续进行实验。后续的实验过程很简单(使用这个网站的功能即可),也是课程要求的验证性实验的主要内容,因此不做赘述。

对install.sh和run.sh的更改

由于我们进行了较大幅度的改动,过程中很多install.sh文件中的指令并未用到,以及run.sh中的指令也已经对我们不适用,所以为了后续启动环境的便利,还需要对这两个.sh文件进行更改。
注:以下操作均在~/.bitright目录下进行

修改install.sh

1
vim ./install.sh

将其修改为:

1
2
3
4
5
6
#!/bin/bash

pip install -r ./requirements.txt
cd tlsh-master/py_ext
python setup.py install

修改run.sh

1
vim ./run.sh

将其修改为:

1
2
3
4
#!/bin/bash
conda activate python36
python network.py

这样,后续运行程序只需要执行run.sh:

1
source ./run.sh

就可以正常开启网站:

  • 注:在安装过程中如果仍有报错,执行install.sh,然后根据报错再作后续修改即可:
    1
    source ./install.sh

总结

写到最后还是想说,这些因为实验背景材料不充足、过时导致的不必要的问题,似乎不应该成为这项实验的主要内容。希望未来做该实验的同学们能够收到一份更加合理的实验说明、准备材料;希望学校未来的课程设计能够更精进、更合理、更人性化,向真正的计算机一流高校看齐吧。


数字内容安全实验(五)环境配置问题的解决
https://fisherder.github.io/2024/06/04/数字内容安全实验(五)问题的解决/
作者
Fisherder
发布于
2024年6月4日
许可协议