当前项目仍在开发阶段,所以软件会输出很多不必要信息(现在添加了 verbose
这个 option)
ReleaseButler 旨在简化Linux系统上的 Github 上的软件安装过程🤗。 它可以自动检测底层 Linux 发行版,从指定的 GitHub 项目主页获取对应的软件包并安装,同时也支持更新操作。
目前我是想要实现一个类似 BSD 系“类 ports 系统”那样的东西,就像 Arch Linux 的 ABS,或者像是 Gentoo Linux 的 protage。目前想要的甚至还没 ABS 那么复杂,Gentoo Linux 那样标记 USE 变量更是想都没想了。
TODO:
- 与 libapt-pkg 和 libdnf 等集成
- 在 GitHub 创建一个仓库存储软件包安装的 json 文件,用户可以直接 import 之后安装
- 现在计划实现成 portage 的表现形式,即创建一个 Git 仓库,远端的 build 脚本都通过
git clone --depth=1
来更新,软件从这个文件夹去找到相关的 build 脚本。
- 现在计划实现成 portage 的表现形式,即创建一个 Git 仓库,远端的 build 脚本都通过
- 支持更多的软件(源码)分发平台,但目前就只是做了对 GitHub 的处理
我已经添加了对 sudo
和 doas
的检测。
Note
我这里假设了 sudo
和 doas
会存在于 /usr/bin 目录下
自动发行版检测:ReleaseButler 确定运行环境的Linux发行版,确保与各种系统的兼容性。
安装和更新:使用单个命令轻松安装软件包。 ReleaseButler 支持更新,使您安装的软件保持最新。
尽量适配各种情况:尝试引入各种字段以适配各种仓库的安装步骤。
$ releasebutler [--verbose] install --package <name> --packname <package name> --from <url>
--package
字段接受的是要安装的软件的名称,而 packname
字段是这个软件包名,例如 fastfetch-linux-amd64.deb
就是 packname
从命令行安装尚未支持所有字段(如 install
,build
等)。
$ relesebutler --update
$ relesebutler --parse <file name>
note: 这个文件需要在 ~/.config/ReleaseButler/ 目录中
Note
ReleaseButler 现在还不支持指定软件包的单独更新。🙃
使用命令行安装的软件是记录在 ~/.config/ReleaseButler/info.json,但是在更新的时候实际上会遍历 ~/.config/ReleaseButler/ 目录下的所有json文件。
我尝试通过这种方式支持引入其他地方来的json文件。但文件名不能叫 package.json,这个文件用来记录已安装软件包的版本,遍历到了这个json文件也会跳过。
你可以附加 --verbose
得到更多的调试信息输出
$ relesebutler --verbose
{
"fastfetch": {
"pakname": "fastfetch-linux-amd64.deb",
"sha256": "5542cec5666645d5562a0c345d75cb6a828b914c5e0f53d8d0deee703667c75f",
"url": "https://github.com/fastfetch-cli/fastfetch",
"version": "2.32.1",
"build" : [
"touch something",
"touch haaa"
],
"install" : [
"echo something > something"
],
"clone": false,
"download" : false
}
}
pakname
是 Release 页面的软件包名称。sha256
是该软件包的 SHA256 哈希值,非必需参数。build
用于存储一些软件下载前的要执行操作。install
用于存储一些软件安装后要执行的操作。clone
表示是否直接 clone 这个仓库。download
表示是否只是单纯在从Release下载了软件包,而不是下载了之后调用系统软件包管理器安装它。
- Debian/OpenSUSE
如果你在 Debian 发行版下编译该项目:
$ sudo apt install libcurl4-openssl-dev clang cmake
$ git clone https://github.com/suoyuan666/ReleaseButler.git
$ cd ReleaseButler
$ git submodule update --init --recursive
$ cmake -B build -DCMAKE_BUILD_TYPE=Release
$ cmake --build build -j `nproc`
如果是在其他平台下编译,原谅我懒了,自己去寻找 libcurl4-openssl-dev 这个包对应其他发型版的软件包名吧。😛
我尝试在 OpenSUSE Tumbleweed 中编译这个项目,我是用了下边的语句安装了所需的软件
$ sudo zypper install libcurl-devel clang cmake
该项目使用了:
- libcurl:用于通过 URL 获取网页内容
- openssl:使用了 libcrypto 提供的 SHA256 哈希算法
- p-ranav/argparse:用于命令行参数的解析
- google/googletest:用于对特定函数的测试
- nlohmann/json:针对 JSON 文件格式的读取和写入
- suoyuan666/tlog:日志格式的信息输出