过时的python版本、过时的程序、过时的下载链接——这就是数字内容安全实验五。
前言
被数字内容安全实验五的环境搭建部分折磨一整天后,终于把遇到的问题一一解决。
为什么网安没有数字内容安全?希望下学期的网络安全治理给点力吧……
为了不让同学,或者学弟学妹们(如果25年实验没改的话)被正常教学课程实验本不该出现的版本过时、说明不详细等问题,无缘无故浪费时间和精力,在此写一篇文章讲讲这些问题是如何解决的。
环境搭建
项目准备
主机环境:ubuntu22.04 LTS(VMware虚拟机)
项目的地址:https://github.com/liuyanqi/bitright
一看是五年前的老项目,就有点害怕…
直接git clone到~目录:
|
|
文件Installation Guide.txt的指导:
按照Guide的说法,如果是第一次运行:依次执行这两条命令
|
|
如果是后续的运行:执行这一条命令
|
|
但其实如果完全按照这个Guide执行两个脚本,绝大多数电脑(尤其是python3版本在3.10及以上的)都会遇到一堆报错,而且十分零碎,很难解决。 究其最根本的原因,还是所需Python版本不兼容的问题,包括安装环境所需的python版本过时、运行程序所需的python版本过时,等等。
笔者在后来学习生活中才发现,许多配置环境时出现的令人一头雾水的问题,都是由于版本过时引起的……
source ./install.sh命令
打开install.sh:
分析这个脚本的作用,可以将它分成三个部分:
|
|
最关键的就是这个install.sh的过程,我们分开说。
安装virtualenv并开启虚拟环境
先了解一下virtualenv是干什么的:
全网最最最详细的virtualenv的使用命令详解_virtualenv命令
关键信息:
- 使用
virtualenv
可以创建一个隔离的Python环境 - 如果你的系统上安装了多个版本的Python,可以指定使用特定版本的Python创建虚拟环境
所以说install.sh中的第一部分作用就是安装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.
笔者事后才发现,如果你的开发基于Python,那就几乎绕不开conda这个东西
将Virtualenv换成Anaconda
如果激活了env环境, 先关闭env环境:
|
|
然后直接删除./env
目录即可:
|
|
接下来安装Anaconda。
关于Anaconda的安装及配置,详见: 【Conda】超详细的linux-conda环境安装教程_linux安装conda-CSDN博客
由于篇幅有限,只介绍安装后的使用。
成功配置后,你可以看到(base)字样:
直接创建虚拟环境:
|
|
其中的python36是你设置的环境名称。
- 注:如果create这一步无法进行,试试conda换源。2024年6月实测:将~/.condarc改为以下内容就可以:
|
|
然后执行命令开启虚拟环境:
|
|
看到在终端界面带有(python36)
的字样,执行命令:
|
|
说明环境已经激活完成。
安装requirement.txt上的程序
install.sh的第二部分是安装requirement.txt上的程序。
打开requirement.txt:
可以看到需要用pip安装的程序及其版本。
直接运行命令:
|
|
所需程序被一一安装。
注意:如果这时候安装进度条是彩色的,说明python3.6的环境并没有真正启动,需要重新启动conda环境。正常情况下,安装进度条应该是白色的,如下图:
报错情况及处理
如果安装image-match时遇到报错:
|
|
直接安装pytest-runner即可:
|
|
同样地,如果安装scikit-image时遇到报错:
|
|
直接安装cython即可:
|
|
如果报错:
按照说明,安装numpy即可:
|
|
如果报错:
|
|
一般是安装numpy时缺少gcc导致的,直接安装即可:
|
|
遇到报错,修复完成后,重新运行pip install -r requirements.txt
,再根据情况进行修复……这样一遍遍运行,耐心等待,到最后肯定可以顺利完成。
附上安装完成截图:
解压并安装tlsh
|
|
这一步依旧是巨坑。运行过install.sh的同学肯定清楚,这里运行会报错,完全无法找到https://bitright.sfo2.digitaloceanspaces.com/tlsh.zip 里的文件。
依旧是过时的问题。
所以我们不能从他提供的网站里下载和安装tlsh.zip
求助搜索引擎:
原项目地址:trendmicro/tlsh (github.com)
根据原项目的安装教程,我们首先下载并解压文件:
|
|
然后再执行编译安装脚本:
|
|
- 注:此处需要你预先安装cmake,如果执行不成功,大概率是你还没有安装cmake:
|
|
编译完成:
然后安装py-tlsh包:
|
|
至此tlsh也成功安装。
运行network.py
在执行完source ./install.sh
后,接下来就是:
|
|
如果报错如:
直接安装:
|
|
同样地,后续缺少什么module就pip install
对应的包,再重新python network.py
即可。
如果遇到了这个报错:
TypeError: __init__() got an unexpected keyword argument 'winmode'
可以看到,问题出在chromaprint
上。
我们直接重新安装一下chromaprint
即可:
|
|
安装所有所需模块后,再执行python network.py
正常情况下即可成功启动。
- 注:关于报错“TypeError: __init__() got an unexpected keyword argument 'winmode'”,其实也是出自版本更新导致的不兼容问题
在虚拟机的浏览器中输入http://127.0.0.1:8000/ 并进入,或者直接在终端中Ctrl+单击打开链接:
可以看到页面正常显示。此时你可以执行后续上传文件等操作,功能均正常。
可能速度会很慢,耐心等待。如果太慢或者无响应,就在终端Ctrl+C终止程序,再重新python network.py
试试。
如果速度实在慢到无法忍受的话,我推荐你使用WSL2的ubuntu系统,而不是VMware workstation. 换成WSL的话,速度会变快很多倍,WSL真的很好用……
接下来,实验所需上传的文件就在~/.bitright/media目录里,尽情使用它们吧。
对install.sh和run.sh的更改
由于我们进行了较大幅度的改动,过程中很多install.sh文件中的指令并未用到,以及run.sh中的指令也已经对我们不适用,所以为了后续启动环境的便利,还需要对这两个.sh文件进行更改。
这一步在实验验收环节中非常关键,帮助你在给助教演示时实现快速启动环境。
注:以下操作均在~/.bitright目录下进行。
修改install.sh
|
|
将其修改为:
|
|
修改run.sh
|
|
将其修改为:
|
|
这样,后续运行程序只需要执行run.sh:
|
|
就可以正常开启网站:
- 注:在安装过程中如果仍有报错,执行install.sh,然后根据报错再作后续修改即可:
|
|
至此,所有因为实验指导书过时引发的不必要的问题已经解决。你可以继续进行实验。后续的实验过程很简单(使用这个网站的功能即可),也是课程要求的验证性实验的主要内容,因此不做赘述。
总结
写到最后还是想说,这些因为实验指导书不详细和过时导致的不必要的问题,似乎不应该成为这项实验的主要内容。希望未来做该实验的同学们能够收到一份更加合理、时效性更强的实验指导书吧。