搭建软件仓库回源代理拾遗

2024-01-24 11:32

本文主要是介绍搭建软件仓库回源代理拾遗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2018年10月08日 统计字数: 4581字 阅读时间: 10分钟阅读 本文链接: https://soulteary.com/2018/10/08/how-to-set-hub-proxy.html


搭建软件仓库回源代理拾遗

这次机器升级带来的服务大迁移过程中,我发现之前设定给 Npm 仓库、Docker 仓库专用的代理服务失效了。

之前这台专供仓库使用的代理服务,是跑在一台古老的群晖设备(DS115j)上的,当我探寻问题登录设备之后,发现了一件事:不光是代理程序进程消失了、守护进程管理软件也消失了,这大概率是群晖系统自动升级造成的。

考虑服务稳定性和维护成本,我决定把代理服务从群晖中剥离,正巧前一阵收拾屋子,发现还有一台“MTK7621”的迅雷下载宝,决定废物利用一下,做一台稳定性更高的代理服务设备。

如果你有闲置路由器或者下载宝,也有类似需求,那么下面的内容,应该可以帮到你。

更换服务载体的考虑

为什么选择类路由设备的下载宝作为服务载体呢,主要是考虑以下几个角度:

  • 稳定的白盒环境:
    • 相比较在低端群晖中使用(非 Docker 容器运行),会受到不确定的系统环境变化影响,开源的 OpenWRT 更值得信赖,从配置到应用软件,全部都敞开在你的面前。
    • 路由器文件系统多数只读,保障了环境的稳定。
  • 相对够用的资源:
    • 性能足够,发热量低。
    • 下载宝支持通过 USB 进行储存扩展,当然,使用机身自带的 SD / MMC 卡槽扩展的容量也足够我们使用了。
  • 安静却不失小巧:
    • 如果说 DS115j 几乎静音,下载宝、多数路由无风扇设计的设备则是绝对静音。
    • 相比较一本大部头书厚的 DS115j 来说,下载宝和小米充电宝差不多的体积,极大的节省空间。

初始化设备

编译固件,网上讲的太多了,这里就不赘述了,教程在 GitHub 和一些个人博主的日志上都有,如果实在懒得编译可以使用网上的固件,寻找你信任的作者的三方固件也不是不可以。

我这里会着重写一些和常规路由器不同的地方。

由于下载宝只有一个 RJ45 接口,所以他只能作为单臂路由或者普通的网络客户端使用,这里我们为了更少的性能损耗和维护成本,会将设备作为网络客户端使用。

选择 BootLoader

在进行固件刷新之前,考虑到有可能出现固件刷新失败造成无法启动、无法再次刷入,建议先了解并刷入一个稳定可靠的 BootLoader ,普遍的选择是:

  • breed
  • uboot

我这里推荐使用 Breed ,如果你使用的设备也是下载宝,那么可以使用下面的地址:

 
  1. https://breed.hackpascal.net/breed-mt7621-xunlei-timeplug.bin

当你将 Bootloader 刷入设备之后,下载宝启动进入 Breed 和其他的设备不同,需要长按的不是 Reset 按键,而是位于 Reset 按键小孔上方的硬盘弹出按钮。

断开设备电源,长按硬盘弹出按钮,给设备供电,等待设备启动完毕,访问 http://192.168.1.1/ 即可打开 Breed 的管理界面。

在进行刷机过程中,除了选择你的固件文件之外,其他一切保持默认值即可。

默认鉴权

如果你使用的官方配置编译出的固件,默认账号一般是 root, 密码为 admin

在登录管理界面之后,需要对 Dropbear 提供的 SSH 访问功能中添加你的 SSH 密钥, 以方便后面的操作。

时间相关设置

有的代理软件考虑重放攻击,所以会涉及到“当前执行环境时间”这个因素。

为了保障这类软件的正常使用,我们需要先设置靠谱的 NTP 服务器,从网上可以找到大量资源,比如:

  • 1.cn.pool.ntp.org
  • ntp1.aliyun.com

选择你觉得靠谱的,进行设置就好了。

清理无用软件

考虑到我们只是要一个稳定可靠的代理服务,所以官方固件、三方固件中包含的许多内容是可以直接清理掉的,比如我们不需要文件共享服务等。

 
  1. opkg remove luci-app-samba --force-removal-of-dependent-packages
  2. opkg remove samba36-server

可以看到,如果你想连锅端一些软件,可以使用 --force-removal-of-dependent-packages 这个参数,但是这个参数不是万能的,对于 CLI 软件和管理面板脱离的安装包,还需要额外进行卸载操作。

另外,如果你对 luci-* 软件包进行了卸载,必须进行重启,才能够将管理后台上的菜单完全干掉。

准备软件存储空间

前面提过,路由类设备的文件系统多数被设定为了只读类型,一旦重启将会把所有修改打回原形,除非执行了一些特殊的命令,将改动同步到设备中。

并且多数设备可用闪存的空间都非常有限,这里要外储存器进行一些操作,来扩展可用空间。

在进行空间扩展之前,需要先了解哪个设备该被“安排”,使用 fdisk 命令:

 
  1. OpenWrt:~# fdisk -l
  2.  
  3. ...
  4.  
  5. Disk /dev/mtdblock6: 5.8 MiB, 6029312 bytes, 11776 sectors
  6. Units: sectors of 1 * 512 = 512 bytes
  7. Sector size (logical/physical): 512 bytes / 512 bytes
  8. I/O size (minimum/optimal): 512 bytes / 512 bytes
  9.  
  10. Disk /dev/mmcblk0: 7.4 GiB, 7969177600 bytes, 15564800 sectors
  11. Units: sectors of 1 * 512 = 512 bytes
  12. Sector size (logical/physical): 512 bytes / 512 bytes
  13. I/O size (minimum/optimal): 512 bytes / 512 bytes
  14. Disklabel type: dos
  15. Disk identifier: 0x00000000

这里名为 /dev/mmcblk0 的设备就是外置储存卡了,使用 mkfs.ext4 命令可以对其进行格式化。

 
  1. OpenWrt:~# mkfs.ext4 /dev/mmcblk0
  2. mke2fs 1.44.1 (24-Mar-2018)
  3. Found a dos partition table in /dev/mmcblk0
  4. Proceed anyway? (y,N) y
  5. Creating filesystem with 1945600 4k blocks and 486720 inodes
  6. Filesystem UUID: 01f3548b-a8e9-418a-ae37-fbe8e710826e
  7. Superblock backups stored on blocks:
  8. 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
  9.  
  10. Allocating group tables: done
  11. Writing inode tables: done
  12. Creating journal (16384 blocks):
  13. done
  14. Writing superblocks and filesystem accounting information: done

当设备格式化完成之后,我们并不能够真正的开始使用。

如果你熟悉操作 fstab 的话,直接编辑 fstab 文件可以把刚刚格式化好的分区进行挂载点分配,如果不熟悉,OpenWRT 管理界面有专门针对挂载点进行设置的页面。

我这里将刚刚的储存卡使用 ext4 文件系统挂载到了 /data 目录。

将设备设置为网络客户端

将电脑和下载宝使用网线连接,因为我们不需要将它当路由使用,所以可以在管理界面将 DHCP 服务先进行关闭。

然后打开接口管理界面,将唯一的接口的网络协议设置为 DHCP客户端,这里需要注意,当你点击保存后,新版的控制台会先进行尝试配置,这个配置是肯定会失败的,所以会提示你是否要进行回滚操作还是继续进行强制应用,当然是后者。

在你点击强制应用之后,便可以将下载宝和电脑断开连接,将下载宝和路由器进行连接,然后直接访问路由器分配的IP即可继续进行管理操作。

因为是在内网进行服务,所以可以继续在接口配置中,将 IPV6 关闭。

安装OpenWRT离线软件包

通过 SCP 等命令,我们可以将下载好的软件安装包传送到下载宝上,但是当你使用 opkg 命令进行安装的时候,很可能会遇到下面的情况:

 
  1. OpenWrt:~# opkg install ./package.ipk
  2. Unknown package 'package'.
  3. Collected errors:
  4. * pkg_hash_fetch_best_installation_candidate: Packages for package found, but incompatible with the architectures configured
  5. * opkg_install_cmd: Cannot install package package.

解决方案其实很简单,先通过 opkg 命令查看你支持的软件包。

 
  1. OpenWrt:~# opkg print-architecture
  2. arch all 1
  3. arch noarch 1
  4. arch mipsel_24kc 10

可以看到,下载宝支持的软件包架构是 mipsel24kc

而如果你要查找一些软件的话,可以从官方的软件仓库中获取: http://archive.openwrt.org/releases/18.06.0/packages/

配置代理软件

代理软件有许多种,所以这里不对具体的软件进行配置,只是聊一下一些通用的处理。

自动启动

使用命令行启动代理软件很容易,但是如果想达到“判断程序没有运行再执行启动命令”就需要借助脚本来实现了。

 
  1. #!/usr/bin/env sh
  2.  
  3. EXIST=$(ps | grep 软件名称 | grep -v grep)
  4.  
  5. if [ "${EXIST}" == "" ]; then
  6. echo 'Start new proxy client.'
  7. /data/软件名称 &
  8. fi

将脚本保存到一个固定的位置,比如上文中提到的外置储存器中 /data/check.sh,然后配置“计划任务”(crontab) ,然系统每分钟自动检查是否应该启动代理软件,避免代理软件崩溃后无法提供服务。

 
  1. */1 * * * * /data/check.sh

重启进程

非商业级产品,在长时间运行的过程中,难免出现内存泄露等问题,导致资源越用越多,但是提供的服务却越来越差,甚至完全不提供服务,变成一个僵尸进程。

为了解决这个问题,我们可以使用自动重启软件的策略,但是同样的,这里也需要编写一个简单的脚本:

 
  1. #!/usr/bin/env sh
  2.  
  3. EXIST=$(ps | grep 软件名称 | grep -v grep)
  4.  
  5. if [ "${EXIST}" != "" ]; then
  6. echo "restart client"
  7. echo ${EXIST} | awk 'NR==1{print $1}' | xargs kill -9
  8. /data/软件名称 &
  9. fi

同样的,在计划任务中添加一个新的脚本,可以做到让程序每小时自动重启,避免潜在的资源占用过多却不去释放的问题。

 
  1. * */1 * * * /data/restart.sh

最后

如果你认为你的虚拟机同样稳定、或者路由器有大量的冗余资源,也可以将这个功能放在他们上面,但是个人建议是做成 “单一职责”、“简单可依赖” 的服务,不搞巨无霸。

—EOF

这篇关于搭建软件仓库回源代理拾遗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639559

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个