# 利用闲置带宽,24小时下载资源

今天老婆突然心血来潮买了一个在线课程，准备假装开始学习了。课程是录制好的加密视频，不出所料的直接给了一个百度网盘的下载链接。好家伙又是几十个GB的资源，于是老婆大人安排我在她学习热情消退之前给她下载完课程资料。想着家里软路由几乎天天闲置的带宽，遂决定在软路由上搞个百度网盘24小时下载就完了，虽然穷人的百度网盘只有几百K的下载速度，但连续下载个两天也就down完了，而且跑在软路由上眼不见心不烦，也不会有速度焦虑。

%[https://youtu.be/5teutTC-yEk] 

说干就干，于是简单Google了下在软路由上可以使百度网盘的一个Web版插件`BaiPCS-Web`，折腾了一会儿发现不怎么好用。不禁想到了前段时间折腾的Docker工作空间——Kasm。简单查了下百度网盘官方也提供了Linux安装包，既然折腾一顿，不妨也看下相关的其它常用的下载工具，qBittorrent毫无疑问友好的支持Linux，准备开干，整个下载包合集吧。正准备动手，老婆上来就是一句：“你这玩意儿连迅雷都没有，不行啊。”，这不能忍，Google了下，果然迅雷还出了一个Linux客户端，迅雷官网上没有找到但在某论坛找到了安装包，那就一起嗨吧。

这里简单介绍几句Kasm吧，这玩意是一个牛逼的神器，它提供过了一个界面话的Linux系统，同时把各种大大小小的工具装到了里面，然后以Docker镜像方式提供给使用者。这就意味着你可以将各种复杂的工具包甚至是开发运维环境带在身边，在任何一个可以运行Docker的机器上运行一个容器即可得到你的工作环境。仿佛就是儿时动画片《龙珠》中的万能胶囊啊，任何庞杂的都是全部封装到一个万能胶囊中，任何时间地点需要时，取出胶囊一丢，东西就有了。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1682391440442/7e95dafc-f549-47e7-8ef9-d2eb7d166ea8.png align="center")

当然虽然Kasm非常nice的为我们提供了一些安装了类似Chrome/Telegram/VsCode等工具的镜像，但显示它不可能提供百度网盘、迅雷等具有中国特色的下载工具。那我们就自己动手封装一个，我们可以基于现在的镜像如`kasmweb/chrome`去扩展即可，但是现有镜像基本都是基于Ubuntu 20.04，而且工具版本也不是最新的。既然我们打算自己封装镜像了，那不妨粗暴一点，基于一个最新的Ubuntu 22.04来一一安装我们需要的各种工具。简单找了下发现了目标镜像——`kasmweb/core-ubuntu-jammy`,这是一个带UI的Ubuntu 22.04的干净的镜像，不废话直接上Dockerfile：

```bash
FROM kasmweb/core-ubuntu-jammy:develop

LABEL version="1.0" maintainer="colinchang<zhangcheng5468@gmail.com>"

USER root

# 替换阿里云系统源
COPY $PWD/sources.list /etc/apt/sources.list
COPY $PWD/xunlei_1.0.0.1-myubuntu_amd64.deb /home/kasm-user
RUN apt update && mkdir -p /home/kasm-user/Desktop \

# Chrome
&& apt install -y xdg-utils fonts-liberation libu2f-udev \
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& dpkg -i google-chrome-stable_current_amd64.deb \
&& sed -i 's/Exec=\/usr\/bin\/google-chrome-stable/Exec=\/usr\/bin\/google-chrome-stable --no-sandbox/g' /usr/share/applications/google-chrome.desktop \
&& ln -s /usr/share/applications/google-chrome.desktop /home/kasm-user/Desktop/google-chrome.desktop \

# BaiduNetDisk
&& wget https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb \
&& dpkg -i baidunetdisk_4.17.7_amd64.deb \
&& ln -s /usr/share/applications/baidunetdisk.desktop /home/kasm-user/Desktop/baidunetdisk.desktop \

# Thunder
&& apt install -y libgtk2.0-0 libdbus-glib-1-2 \
&& dpkg -i xunlei_1.0.0.1-myubuntu_amd64.deb \
&& sed -i 's/Exec=\/opt\/thunder\/xunlei\/start.sh/Exec=\/opt\/thunder\/xunlei\/start.sh --no-sandbox/g' /usr/share/applications/xunlei.desktop \
&& ln -s /usr/share/applications/xunlei.desktop /home/kasm-user/Desktop/xunlei.desktop \

# qBittorrent
&& add-apt-repository -y ppa:qbittorrent-team/qbittorrent-stable \
&& apt update \
&& apt install -y qbittorrent \
&& ln -s /usr/share/applications/org.qbittorrent.qBittorrent.desktop /home/kasm-user/Desktop/org.qbittorrent.qBittorrent.desktop \

# Visual Studio Code
&& wget https://az764295.vo.msecnd.net/stable/704ed70d4fd1c6bd6342c436f1ede30d1cff4710/code_1.77.3-1681292746_amd64.deb \
&& dpkg -i code_1.77.3-1681292746_amd64.deb \
&& sed -i 's/Exec=\/usr\/share\/code\/code/Exec=\/usr\/share\/code\/code --no-sandbox/g' /usr/share/applications/code.desktop \
&& sed -i 's/Icon=com.visualstudio.code/Icon=\/usr\/share\/code\/resources\/app\/resources\/linux\/code.png/g' /usr/share/applications/code.desktop \
&& ln -s /usr/share/applications/code.desktop /home/kasm-user/Desktop/code.desktop \

&& apt autoremove -y \
&& apt clean \
&& rm -rf *.deb
```

需要注意的是，除了常规的下载安装包并安装依赖工具包之外，要将工具包软链接（相当于Windows中的快捷方式）放到桌面上，还需要修改一些个配置，每个软件各不相同。当然相关指令我已经放到`Dockerfile`中了，你要为我怎么知道的，当然是跑一个裸容器，然后进容器界面操作一番后对比软链接文件内容总结出来的啦，有读者有兴许的可以在留言告诉我出一期教程。下面就是编译镜像运行容器，shutup and show me the code！😎

```bash
# build 
docker build -t colinchang/ubuntu-desktop .  
# run 
docker run -d \
    --name ubuntu \
    --shm-size=512m \
    -p 443:6901 \
    -e VNC_PW=password \
    -u root \
    --restart always \
    colinchang/ubuntu-desktop
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1682386583257/7ef5771a-b9c2-4600-9872-202f5a46664b.png align="center")

除了下载工具外我还顺手打包了VsCode（方便修改各种配置文件）和Chrome（访问资源网站）。

当然需要特别注意的一点是**务必要记得在运行容器时，将下载目录映射到宿主机**，不然容器一重启，千辛万苦下载的资料就灰飞烟灭了。另外通过浏览器访问时协议类型务必确认是`https`，默认用户名是`kasm_user`，密码是运行容器时设定的。

到这里我们的下载工具包就搞定了，可以让我们的软路由24小时为我们下载各种资源了，欧耶！

其实在某些软路由系统中如小宝的iStore OS，已经为我们提供了Kasm的插件，也可以直接使用插件运行Kasm容器，然后进行定制，只是我更喜欢自己定制的快乐和折腾的乐趣。当然基于Kasm只是安装几个下载工具其实是大材小用了，如果如果你是一个会玩的人，你甚至可以将任意想要的工具乃至开发运维环境都打包到一个镜像中。Kasm只是基础设施，它为使用者提供了一个容器化的带UI界面的Linux系统，你可以基于它进行各种丰富的扩展和自定义。

OK，牛逼就吹到这里吧~

文中相关代码已共享到[GitHub](https://github.com/colin-chang/ubuntu-desktop)，各位自取！
