2023-11-14T08:37:12.png

一、搭建背景

Eve-ng/pnetlab是集成度高,功能丰富的模拟器软件,支持iol、qemu、dynamips等虚拟化/模拟器软件,是IT工作者在学习/研发/实施/排障等方面的得力助手。该软件运行过程中依赖相关镜像以及yml配置文件、图标等资源,需要从网络上搜索。对于初入者,以及重度使用者的使用增加了复杂度,消耗了精力。近期,发现在国外的LabHub团队,其对资源进行了梳理,并编写ishare2脚本用于下载和部署,类似Unbuntu的apt以及CentOS的yum系统软件管理软件,使得效果良好,效率得到提升。LabHub团队及iShare2软件、镜像仓库均在国外,国内下载以及使用起来会有些许问题。由此,萌生了在国内搭建的念头。

2023-11-14T08:47:56.png

为提高国内使用模拟器软件效率,经过对LabHub的iShare2软件和镜像仓库运行方式分析,并与该团队成员Alex进行讨论后,对方表示支持并将其内容通过Google Drive网盘的形式共享与我。对方十分高兴有人能够在China部署该镜像站点,并提供了一系列的帮助。主要是提供了镜像同步方案:

  1. 对方将文件内容以Google Drive的形式共享。
  2. 本地将使用rclone的方式对其进行同步并定期同步至本地网盘(暂定123pan,有直链功能,速度快)。
  3. 修改ishare2插件中的镜像站点位置,并分享与国内小伙伴使用。

二、与labhub组织沟通并获得镜像仓库源站访问权限

Google Drive共享文件夹

2023-11-14T08:44:44.png

三、克隆源站数据到本地

wget https://downloads.rclone.org/v1.64.2/rclone-v1.64.2-linux-amd64.zip
unzip -d . rclone-v1.64.2-linux-amd64.zip
cp ./rclone-v1.64.2-linux-amd64/rclone /bin/

配置

rclone config
# 18 for google drive
# 35 for ssh

配置rclone同步google drive这块还是有点窍门,当输入rclone config后,先选择18 google drive,然后慢慢敲回车,不用配置advance高级选项,当转到google web页面认证之后,会提示是不是开启team drive,这个是我们需要的,然后选择1个。

同步过程中,首先选择同步1.2TB的UNETLAB II,选择ssrdog 75块企业每月850GB流量,中间还剩大概5GB流量的时候,进行了68元的流量重置,又获得了850GB流量。而ssrrdog所产生的socks代理没有直接给rclone使用,而是使用proxycap为rclone提供socks代理服务。整个同步过程花费33小时。'

2023-11-20T01:56:56.png

当我在11月18日上午同步UNETLAB II成功后,继续同步500GB左右的UNETLAB I。但是同步了2个文件后,突然报大量文件找不到。经过google drive后台查看,美国方面Alex取消了共享权限,而且也没有邮件通知。于是我给Alex留了言,大概2个小时候左右,Alex回复说是不小心取消了,然后恢复了访问权限。继续同步。

该部分仅登录用户可见

这次同步由于ssrdog流量已不多,于是采用ssh生成socks端口的形式,从香港作为中继拉取数据。分别测试了限制香港出口带宽50Mbps、100Mbps和300Mbps,结果大概稳定在80Mbps。但是有一个问题,就是同步大概100GB文件会导致ssh打出的socks代理端口异常。然后使用killall ssh;ssh -NfD 0.0.0.0:9999 root@xxx的形式,同时rclone和proxycap无需变化,同步会自动继续。
2023-11-20T01:57:26.png
2023-11-20T01:59:16.png
后来发现,Google Drive对于同步是有限制的。

整理同步命令:

cd /Volumes/labhub/; rclone sync unetlab2: "local:UNETLAB II" --log-level INFO
cd /Volumes/labhub/; rclone sync unetlab1: "local:UNETLAB I" —log-level DEBUG

四、同步镜像数据到123pan

UNETLAB II的数据与国内之前接触到的数据差不多,同步时大多文件校验后直接秒传,大概几个小时就完成。
UNETLAB I的数据则新增较多,上传持续将近2天。

2023-11-20T02:00:53.png
2023-11-21T03:45:13.png

同步最终123pan位置

同步最终baidu网盘位置

2023-11-21T05:25:35.png

五、国服:修改官方ishare2软件适应国内环境

该部分内容由我在服务端操作,定期与源站同步,并适配国内仓库地址。
如果想自建ishare2仓库,供参考。

#!/bin/bash
cd /www/wwwroot/labhub.sddts.cn/

## 从官方下载ishare2文件
wget -O ishare2 https://raw.githubusercontent.com/ishare2-org/ishare2-cli/alpha/ishare2
## 修改json文件下载地址为国内地址
sed -i 's#https://raw.githubusercontent.com/ishare2-org/mirrors/main/index.gd.json#https://labhub.sddts.cn/index.gd.json#g' ishare2
sed -i 's#https://raw.githubusercontent.com/ishare2-org/ishare2-cli/$CHANNEL/sources.list#https://labhub.sddts.cn/sources.list#' ishare2
## 修改官方脚本中定位template文件错误的bug
sed -i '498c\    data=$(mysql -uroot -ppnetlab -D pnetlab_db -N -e "SELECT control_value FROM control WHERE control_value>1;" 2>/dev/null)' ishare2
sed -i '500c\    pnetlab_version=${data}' ishare2

## 从官方下载json数据文件,并修改内容中涉及的镜像仓库地址为国内地址
wget https://raw.githubusercontent.com/ishare2-org/mirrors/main/index.gd.json -O index.gd.json
sed -i 's#https://drive.labhub.eu.org/0:#https://vip.123pan.cn/1815238395/UNETLAB%20I#g' index.gd.json
sed -i 's#https://drive.labhub.eu.org/1:#https://vip.123pan.cn/1815238395/UNETLAB%20II#g' index.gd.json

## 此处用处不大,对于一般使用不涉及,只是也修改成国内下载地址。并将获取相关github文件时增加国内ghproxy头部。
wget -O sources.list https://raw.githubusercontent.com/ishare2-org/ishare2-cli/alpha/sources.list
sed -i 's#https://raw.githubusercontent.com/#https://ghproxy.sddts.cn/https://raw.githubusercontent.com/#' sources.list
sed -i 's#https://labhub.eu.org/api/raw/?path=#https://vip.123pan.cn/1815238395#' sources.list

六、用户:终端下载与使用方法

大家可以在pnetlab 4.2.10中测试使用,对eve-ng暂时没有进行测试。另外,大家也可以直接访问123pan的镜像仓库,按需下载使用。
目前采用的 版本是3.2-alpha,由Alex近期完善,并在TG群进行内测。

(1) 修改本地apt仓库

sed -i 's#vn.archive.ubuntu.com#mirrors.ustc.edu.cn#g' /etc/apt/sources.list
sed -i 's#repo.pnetlab.com#mirrors.sddts.cn/repo.pnetlab.com#g' /etc/apt/sources.list
sed -i '/i-share.top/d' /etc/apt/sources.list
rm -f /etc/localtime ; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
apt update -y
apt install -y jq curl tree unrar qemu-tools

(2) 下载ishare2

rm -rvf /opt/ishare2/cli/*;rm -rvf /usr/sbin/ishare2 ; wget --no-check-certificate -O /usr/sbin/ishare2 https://labhub.sddts.cn/ishare2 && chmod +x /usr/sbin/ishare2 ; mkdir -p /opt/ishare2/cli/tmp ; wget --no-check-certificate -O /opt/ishare2/cli/tmp/ishare2.json https://labhub.sddts.cn/index.gd.json

(3) 配置ishare2

ishare2 config

一路回车,最后来个y

(4) 使用ishare2下载

ishare2 search huawei # 搜索华为镜像
ishare2 pull qemu 525 # 下载华为镜像

2023-11-21T05:28:08.png

自制镜像

(1)华为usg镜像

调整启动项为serial,也就支持了telnet协议,而不是默认的vnc

# 在pnetlab里面直接修改qcow2文件,实现huaweiusg6kv-usg可以使用telnet登录

# 下载镜像
ishare2 search huaweiusg6kv-usg
ishare2 pull 529
# 挂载并修改
# virt-filesystems -a /opt/unetlab/addons/qemu/huaweiusg6kv-usg/hda.qcow2
guestmount -a /opt/unetlab/addons/qemu/huaweiusg6kv-usg/hda.qcow2 -m /dev/sda1 /mnt/
cat /mnt
sed -i 's:DEFAULT normal:DEFAULT serial:g' /mnt/boot/extlinux/extlinux.conf
#sed -i 's:DEFAULT serial:DEFAULT normal:g' /mnt/boot/extlinux/extlinux.conf
umount /mnt
# 修改模版镜像文件
sed -i 's#console: vnc#console: telnet#g' /opt/unetlab/html/templates/intel/huaweiusg6kv.yml

(2)OpenEuler镜像

制作OpenEuler22.03 sp3镜像。账号root,密码Lab_1314

# 使用virtualbox安装openeuler 22.03 sp3
# 关机
cd /mydata/virtualbox/openeuler
rm -f openeuler.vdi.img hda.qcow2
VBoxManage clonehd --format RAW openeuler.vdi openeuler.vdi.img
qemu-img convert -f raw openeuler.vdi.img -O qcow2 hda.qcow2

更新记录

  • 2024/02/26: 同步镜像,无新增/变更。
  • 2024/05/11:同步镜像,更新PNETLab 6.0.0-56、PNETLab-6.ova、PNET_4.2.10.ova、PNetLab-v.4.2.10、PNetLab-v.5.3.13、RG-NSE-Switch-V1.03、RG-NSE-Route-V1.03等。
最后修改:2024 年 05 月 31 日
如果觉得我的文章对你有用,请随意赞赏