[App Sharing] 分享自建的 apt 软件源
Tofloor
poster avatar
cbing
deepin
2024-10-08 19:49
Author

向 Debian、Ubuntu 和 deepin 等 Linux 发行版用户分享我自建的软件源,为常用软件提供更新服务,下载、更新更方便。

https://github.com/wcbing/wcbing-apt-repo

里面收集了一些国内常用的软件,像腾讯系的QQ、QQ音乐、腾讯会议,还有钉钉、百度网盘、Xmind 等。还有一些官方提供源的,包括 Firefox、Steam 以及 Chrome、VS Code 等(后面这些安装后会自行添加软件源),减少需要手动添加源的次数。

  • 兼容性:因为是官方提供的通用 deb 包,所以较新版本的 Debian、Ubuntu 及其衍生版应该都可以正常安装运行。deepin 经简单测试也可以。
  • 下载速度:Github Releases 会重定向到各个 Github 下载加速网站以保证下载速度;其他大都是重定向至软件官网,所以下载速度看软件官网。

注:目前仅针对 x86 用户


F&Q

  • 有些不是星火商店已经收录了吗,为什么不用星火商店?

本软件源与星火商店形式有些不同,星火商店必须要安装客户端,而这个是通用的 APT 软件源,你可以通过命令行或 GNOME Software、KDE Discover 等任意客户端进行升级。并且相比星火商店还有个小优势是更新快,因为都是自动化的流程,不用人工审核投稿。

  • 我知道 DebianCN、铜豌豆软件源等,这个有什么优势?

确实,这个源和 DebianCN、铜豌豆软件源 等类似。相比两者优势是更新快,都是自动化的流程,不用人工整理。拿 Debian CN 为例,其现收录软件大概30多个,除 Chrome 在更新外,其他最新的更新都距今半年以上,很多都是5、6年前的软件。铜豌豆相比之下要好很多,但也不太及时,并且自打包应用较多,兼容性也较差。

  • 有什么劣势?

劣势就是应用较少,现在只有自己常用的软件。


对 deepin 用户

对于 deepin 用户来说,有些应用商店已经有了。但是应用商店一般不会直接使用官方提供的包,而是会拆包修改再重新打包,还会修改包名。这也就造成了更新有一定的延迟。

举个例子,比如今天(10月8号),应用商店中的 VS Code 还是 1.93.0。
图片.png

而官方已经在 10月3号发布了 1.94.0。

图片.png

如果你用的类似软件较多,就可以添加我的源,以提供更好的安装、更新体验,免去经常上官网下载更新。

deepin 用户安装之后不会在应用商店中显示更新,但可通过“设置”-“更新”可以进行图形化的软件更新。

Reply Favorite View the author
All Replies
1 / 3
To page
神末shenmo
deepin
Spark-App
2024-10-09 01:02
#1

那什么,星火也有些是自动化的,只是一直没什么人去写脚本(所以基本上只有我自己用的,就比如有firefox,thunderbird和edge但是没有Chrome),比如你举例子的vscode其实就是自动化维护的

图片.png

https://gitee.com/spark-building-service/vscode/blob/master/build.sh


然后星火现在也不是必须有图形客户端了

https://gitee.com/GXDE-OS/aptss/


但是这个自动化脚本其实搓的有点烂,bash的字符处理能力比较蛋疼,有些配置要在主机上配好(比如里面指定的星火源地址来实现自动比较版本号,但是不影响别的功能),再加上我不会写爬虫所以更受限了,如果可以抄一下你的脚本想必是...joy

Reply View the author
ThinkYoung
deepin
2024-10-09 01:34
#2

太好了 这种合并官网包 重定向的方式太妙了

@cbing @神末shenmo

我想问问这种方式是怎么实现重定向的呢?

还是 apt 本身支持这种网络地址包呢?我打开这个软件源列表看到Packages是这么写的:

Filename: https://packages.microsoft.com/repos/code/pool/main/c/code/code_1.94.0-1727878498_amd64.deb

================================================================

那我是不是可以理解 其实 我有个数据库 直接生成Packages 就OK,

并不需要 每回dpkg扫描所有的deb包 做索引!

数据库可以修改Filename 成官方包的官方地址,以后不必下载官方包到本地,尤其有个latest固定地址最好用

我以前就倡议社区开发大佬们 发github or gitee包 做一个release latest 标签下载包,这样就有个latest固定地址

希望平台和开发大佬们通通气 能做出个通用规范

Reply View the author
Oli
deepin
2024-10-09 02:57
#3

好耶

Reply View the author
Oli
deepin
2024-10-09 02:57
#4

like like

Reply View the author
小小怪冲啊!
deepin
2024-10-09 03:19
#5

还是好人多啊

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 08:15
#6
ThinkYoung

太好了 这种合并官网包 重定向的方式太妙了

@cbing @神末shenmo

我想问问这种方式是怎么实现重定向的呢?

还是 apt 本身支持这种网络地址包呢?我打开这个软件源列表看到Packages是这么写的:

Filename: https://packages.microsoft.com/repos/code/pool/main/c/code/code_1.94.0-1727878498_amd64.deb

================================================================

那我是不是可以理解 其实 我有个数据库 直接生成Packages 就OK,

并不需要 每回dpkg扫描所有的deb包 做索引!

数据库可以修改Filename 成官方包的官方地址,以后不必下载官方包到本地,尤其有个latest固定地址最好用

我以前就倡议社区开发大佬们 发github or gitee包 做一个release latest 标签下载包,这样就有个latest固定地址

希望平台和开发大佬们通通气 能做出个通用规范

他这个东西还是中心化仓库的,是有个文件夹叫https:/


这种类似AUR的东西已经有了 https://pacstall.dev/

我个人是觉得改apt是没必要的,给apt做一个wrapper在获取包的时候做文章就好了

你有这个想法可以参考下星火的aptss ,目前是会读配置合成http链接来从多个源下包

魔改下,合成下载链接之前从你说的数据库查询,就可以做到这个效果了

https://gitee.com/spark-store-project/spark-store/blob/dev/tool/apt-fast/ss-apt-fast

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 08:31
#7

看了下,python不太会写....bash处理字符串比较蛋疼,所以我从你的源里偷包了哈,偷个QQ自动维护joy

https://gitee.com/spark-building-service/linuxqq/blob/master/build.sh

能加上arm和龙就更好了(想得很美)pride

Reply View the author
pgxppp
deepin
2024-10-09 08:50
#8

这个好,这个好,必须支持

Reply View the author
ThinkYoung
deepin
2024-10-09 09:13
#9
神末shenmo

他这个东西还是中心化仓库的,是有个文件夹叫https:/


这种类似AUR的东西已经有了 https://pacstall.dev/

我个人是觉得改apt是没必要的,给apt做一个wrapper在获取包的时候做文章就好了

你有这个想法可以参考下星火的aptss ,目前是会读配置合成http链接来从多个源下包

魔改下,合成下载链接之前从你说的数据库查询,就可以做到这个效果了

https://gitee.com/spark-store-project/spark-store/blob/dev/tool/apt-fast/ss-apt-fast

智慧火花碰撞出绝妙的点子

很有意思 这个 aptss + 自定义源

有种lxmusic + 六音音源,nodejs的NPX,要火🔥的赶脚

好好营销一下 成为国产系统流行PKG管理工具吧

要不整个AUR社区吧?

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 09:18
#10
ThinkYoung

智慧火花碰撞出绝妙的点子

很有意思 这个 aptss + 自定义源

有种lxmusic + 六音音源,nodejs的NPX,要火🔥的赶脚

好好营销一下 成为国产系统流行PKG管理工具吧

要不整个AUR社区吧?

其实不用改很多,星火设计上是支持全空仓库运行的,其实现在也是全空仓运行

aptss的合成逻辑改一下,改成获取对应.deb所在目录下的.torrent文件即可

种子文件可以直接加入http链接的,只要加上就好了

Reply View the author
乾豫恒益
deepin
2024-10-09 09:21
#11

先收藏了,稍后仔细研究一下

Reply View the author
cbing
deepin
2024-10-09 10:47
#12
ThinkYoung

太好了 这种合并官网包 重定向的方式太妙了

@cbing @神末shenmo

我想问问这种方式是怎么实现重定向的呢?

还是 apt 本身支持这种网络地址包呢?我打开这个软件源列表看到Packages是这么写的:

Filename: https://packages.microsoft.com/repos/code/pool/main/c/code/code_1.94.0-1727878498_amd64.deb

================================================================

那我是不是可以理解 其实 我有个数据库 直接生成Packages 就OK,

并不需要 每回dpkg扫描所有的deb包 做索引!

数据库可以修改Filename 成官方包的官方地址,以后不必下载官方包到本地,尤其有个latest固定地址最好用

我以前就倡议社区开发大佬们 发github or gitee包 做一个release latest 标签下载包,这样就有个latest固定地址

希望平台和开发大佬们通通气 能做出个通用规范

重定向是 nginx 做的,这里有写

https://github.com/wcbing/wcbing-apt-repo/wiki/self-hosting#%E5%8F%91%E5%B8%83-repo

“./https:” 开头的是神末说的那样,服务器上实际有个文件夹,将deb下载下来扫描信息;“https:” 开头的是直接从官方 repo 中获取信息的,直接加上repo地址,服务器没有实际下载过deb文件。

但是这两种最终都通过nginx 302重定向到了官网😸

Reply View the author
cbing
deepin
2024-10-09 10:54
#13
神末shenmo

看了下,python不太会写....bash处理字符串比较蛋疼,所以我从你的源里偷包了哈,偷个QQ自动维护joy

https://gitee.com/spark-building-service/linuxqq/blob/master/build.sh

能加上arm和龙就更好了(想得很美)pride

那个 jsonp 里也有 arm 和 loongarch 的下载地址,应该可以整

Reply View the author
cbing
deepin
2024-10-09 10:58
#14
神末shenmo

那什么,星火也有些是自动化的,只是一直没什么人去写脚本(所以基本上只有我自己用的,就比如有firefox,thunderbird和edge但是没有Chrome),比如你举例子的vscode其实就是自动化维护的

图片.png

https://gitee.com/spark-building-service/vscode/blob/master/build.sh


然后星火现在也不是必须有图形客户端了

https://gitee.com/GXDE-OS/aptss/


但是这个自动化脚本其实搓的有点烂,bash的字符处理能力比较蛋疼,有些配置要在主机上配好(比如里面指定的星火源地址来实现自动比较版本号,但是不影响别的功能),再加上我不会写爬虫所以更受限了,如果可以抄一下你的脚本想必是...joy

好的,我看更新时间比官方晚了半天,以为也是人工加的😂 。

有自动化就好了

Reply View the author
cbing
deepin
2024-10-09 13:02
#15
神末shenmo

看了下,python不太会写....bash处理字符串比较蛋疼,所以我从你的源里偷包了哈,偷个QQ自动维护joy

https://gitee.com/spark-building-service/linuxqq/blob/master/build.sh

能加上arm和龙就更好了(想得很美)pride

刚试了一下,sed 配合之前的正则可以提出 json

download_list="$(curl -fs https://im.qq.com/rainbow/linuxQQDownload | sed -nE 's/.*var params\s?=\s?(\{.*\});.*/\1/p')"
echo $download_list | jq

之后用 jq 取值就可以了。版本实际要用 version + updateDate,或者 url 里取版本字符串。

剩下的就要你做了

tail

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 14:00
#16
cbing

刚试了一下,sed 配合之前的正则可以提出 json

download_list="$(curl -fs https://im.qq.com/rainbow/linuxQQDownload | sed -nE 's/.*var params\s?=\s?(\{.*\});.*/\1/p')"
echo $download_list | jq

之后用 jq 取值就可以了。版本实际要用 version + updateDate,或者 url 里取版本字符串。

剩下的就要你做了

tail

我超,牛逼,拜了kissing_heart

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 14:53
#17
cbing

刚试了一下,sed 配合之前的正则可以提出 json

download_list="$(curl -fs https://im.qq.com/rainbow/linuxQQDownload | sed -nE 's/.*var params\s?=\s?(\{.*\});.*/\1/p')"
echo $download_list | jq

之后用 jq 取值就可以了。版本实际要用 version + updateDate,或者 url 里取版本字符串。

剩下的就要你做了

tail

很坑,QQ这小子版本号不好好写,官网上只有大版本号,没有小版本号

只好下下来再读

那就只能每天跑一次构建了

https://gitee.com/spark-building-service/linuxqq/blob/master/build.sh

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 15:30
#18
cbing

重定向是 nginx 做的,这里有写

https://github.com/wcbing/wcbing-apt-repo/wiki/self-hosting#%E5%8F%91%E5%B8%83-repo

“./https:” 开头的是神末说的那样,服务器上实际有个文件夹,将deb下载下来扫描信息;“https:” 开头的是直接从官方 repo 中获取信息的,直接加上repo地址,服务器没有实际下载过deb文件。

但是这两种最终都通过nginx 302重定向到了官网😸

从服务端进行301是个有趣的设计...嘶,这样的设计似乎非常好,我得记下来!


如果能够加上UA什么的就更妙了,一些国内的限制下载的包也可以下了

Reply View the author
神末shenmo
deepin
Spark-App
2024-10-09 15:37
#19
cbing

好的,我看更新时间比官方晚了半天,以为也是人工加的😂 。

有自动化就好了

每天凌晨推送前会跑一遍自动化构建,所以其实确实会晚一天

还有CDN和同步推送时间,星火有多个下载服务器,同步会稍微晚一点


我也想了一些方案来实现去中心仓库化,参考我上面发的aptss相关帖,但是是真没想到服务端301这样的点子,利用apt原有的机制就可以做到了,不需要


附上我自己现在在用的flat style仓库的仓库部署脚本,也许你将来可以用到

#!/bin/bash
###### 这里要写绝对路径
if [[ -z "$1" ]];then
echo "No option passed. Use current dir"
REPO_DIR="$(realpath $(dirname $0))"
else
REPO_DIR="$(realpath $1)"
fi


DATA_DIR="$REPO_DIR/package-data"
function run_in_parallel {
local max_jobs=100
    while [ $(jobs -p | wc -l) -ge "$max_jobs" ]; do
        sleep 1
    done
    "$@" &
}

######阶段1:检查data目录下的.deb.package文件,去仓库验证是否有对应的.deb
######如果有,则对比时间戳,若仓库的新于.deb.package,则更新,否则return
######如果没有,则删除此文件
mkdir -p $DATA_DIR


cd $DATA_DIR

function check_deb_exist(){
DEB_PATH=`echo ".${DEB_PACKAGE_INFO_PATH%%.package}"` 
if [ -e $DEB_PATH ];then
	if [ "$DEB_PACKAGE_INFO_PATH"  -ot "$DEB_PATH" ] ;then
		###时间戳校验
		echo "$DEB_PATH在生成package文件后发生了改变,将重新生成"
		rm $DEB_PACKAGE_INFO_PATH
	fi

else
echo "$DEB_PATH 已下架"
rm $DEB_PACKAGE_INFO_PATH
#####删除已下架的包

fi

}

for DEB_PACKAGE_INFO_PATH in `find . -name '*.deb.package'`;do

run_in_parallel check_deb_exist


done
wait


##### 阶段2:反查deb,如果有.deb.package,则跳过,否则生成
cd $REPO_DIR

function generate_package_info(){
if [ -e $DATA_DIR/$DEB_PATH.package ];then
return

else
mkdir -p $DATA_DIR/`dirname $DEB_PATH`
apt-ftparchive packages $DEB_PATH > $DATA_DIR/$DEB_PATH.package && echo "新包 $DEB_PATH 已生成package文件"

fi

}
for DEB_PATH in `find . -name '*.deb'`;do

run_in_parallel generate_package_info


done
wait 




find $DATA_DIR -type d -empty -exec rm -rf {} \;

##### 合成Packages
rm $REPO_DIR/Packages
cd $DATA_DIR
for DEB_PACKAGE_INFO_PATH in `find . -name '*.deb.package'`;do
cat $DEB_PACKAGE_INFO_PATH >> $REPO_DIR/Packages
done
rm -f $REPO_DIR/Packages.xz
xz -k $REPO_DIR/Packages

apt-ftparchive release $REPO_DIR/ > $REPO_DIR/Release 

Reply View the author
小鱼贝壳
deepin
2024-10-10 00:52
#20

必须顶贴

Reply View the author
1 / 3
To page