Compare commits

...
18 Commits
Author SHA1 Message Date
gfdgd-xi cb28036eec 移除依赖星火动态壁纸
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-26 21:58:50 +08:00
gfdgd-xi e05436265a debian rootfs环境内置包qt6-base-dev,qt6-base-private-dev
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-26 19:45:18 +08:00
gfdgd-xi 4d67c0c2f0 Revert "使用解压rootfs替代debootstrap,提升速度"
This reverts commit cec74ff92c.

Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-26 19:41:50 +08:00
gfdgd-xi cec74ff92c 使用解压rootfs替代debootstrap,提升速度
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-26 19:25:28 +08:00
gfdgd-xi e094939b96 移除交叉编译hetao构建
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-16 22:12:09 +08:00
gfdgd-xi 3ae20c5867 移除核桃构建
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-15 13:55:16 +08:00
CharOfString ff4666cd2c fix: ACSII art display issue 2026-10-11 22:03:33 -05:00
CharOfStringandClaude Opus 5.5 2fe5b8b9d1 chore: Hide Arch repo update output
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:22:49 -05:00
CharOfString a23074725a exp: Fix arch pkg upload 2026-10-10 21:12:24 -05:00
CharOfStringandClaude Opus 5.5 7e1d43b057 fix: Show Arch repo update output
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:06:11 -05:00
CharOfString bf87ba2f2b fix: AARCH64 Archlinux build 2026-10-10 19:45:04 -05:00
CharOfString c215251f38 fix: Arch building 2026-10-10 19:34:28 -05:00
CharOfString d8c5ea88e0 add: Build Archlinux 2026-10-10 18:40:39 -05:00
gfdgd-xi 09945e156a feat: 新增推荐依赖gxdm-emergency-mode, gxde-freewb, fcitx5-theme-deepin
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-10-04 20:40:59 +08:00
CharOfString 64f4c6b4b3 chore(CharOfString): 更新提交邮箱 2026-09-22 11:38:41 -05:00
shenmo7192andGitee e4d7046327 extra add filetransfer
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2026-08-25 13:50:47 +00:00
shenmo7192andGitee 4130492385 add GXDE Wayland PreInstalled
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2026-08-23 12:40:06 +00:00
gfdgd-xi 87ee719ea4 新增推荐依赖gxde-dlna-caster
Signed-off-by: gfdgd_xi <3025613752@qq.com>
2026-08-11 07:58:55 +08:00
12 changed files with 451 additions and 16 deletions
@@ -25,7 +25,3 @@ jobs:
call-zhuangzhuang: call-zhuangzhuang:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang-cross-host.yml@master uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang-cross-host.yml@master
secrets: inherit secrets: inherit
call-hetao:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-hetao-cross-host.yml@master
secrets: inherit
-4
View File
@@ -25,7 +25,3 @@ jobs:
call-zhuangzhuang: call-zhuangzhuang:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang-cross.yml@master uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang-cross.yml@master
secrets: inherit secrets: inherit
call-hetao:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-hetao-cross.yml@master
secrets: inherit
+2 -2
View File
@@ -26,7 +26,7 @@ jobs:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang.yml@master uses: GXDE-OS/GXDE/.github/workflows/building-deb-zhuangzhuang.yml@master
secrets: inherit secrets: inherit
call-hetao: call-arch:
uses: GXDE-OS/GXDE/.github/workflows/building-deb-hetao.yml@master uses: GXDE-OS/GXDE/.github/workflows/building-pkg.yml@master
secrets: inherit secrets: inherit
+138
View File
@@ -0,0 +1,138 @@
# Copyright (C) 2026 CharOfString <root@charofstring.cc>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
# -----------------------------------------------------------------------------
# 本工作流用于构建Archlinux软件包,仅接受根目录的PKGBUILD或arch/PKGBUILD,没有时跳过。
# This workflow is used to build Arch Linux packages, it only accepts PKGBUILD
# in the root directory of the repo or arch/PKGBUILD, otherwise this will be
# skipped.
name: Building GXDE Arch Package
on:
workflow_call:
secrets:
PASSWD:
required: true
USERS:
required: true
HOST:
required: true
UPATH:
required: true
UPORT:
required: true
UPROGRAM_ARCH:
required: false
env:
REPOSITORY: https://github.com/GXDE-OS/GXDE
BOTTLEPATH: system-bottle
GXDE_ARCH_REPO: https://repo1.gxde.top/gxde-arch
jobs:
detect:
if: github.repository_owner == 'GXDE-OS'
runs-on: ubuntu-24.04
outputs:
pkgbuild-dir: ${{ steps.find.outputs.dir }}
steps:
- uses: actions/checkout@v4
- name: Find PKGBUILD
id: find
run: |
if [[ -f arch/PKGBUILD ]]; then
echo "dir=arch" >> $GITHUB_OUTPUT
elif [[ -f PKGBUILD ]]; then
echo "dir=." >> $GITHUB_OUTPUT
else
echo "No PKGBUILD found, skip Arch build"
fi
build:
needs: detect
if: needs.detect.outputs.pkgbuild-dir != ''
name: ${{ matrix.arch }}-arch
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: x86_64
runner: ubuntu-24.04
- arch: aarch64
runner: ubuntu-24.04-arm
steps:
- name: Clone Repository To Get Script
run: |
git clone $REPOSITORY --depth=1
mv $(basename $REPOSITORY)/* . -v
mv $(basename $REPOSITORY)/.* . -v | true
- name: Configure Base System
run: |
bash .github/workflows/configure-building-enviroment-arch.sh ${{ matrix.arch }} \
$REPOSITORY \
https://github.com/$GITHUB_REPOSITORY \
${{ github.ref_name }} \
$GXDE_ARCH_REPO
- name: Building ${{ GITHUB.repository }}
run: |
gitPath=/home/builder/$(basename $GITHUB_REPOSITORY)/${{ needs.detect.outputs.pkgbuild-dir }}
sudo chroot $BOTTLEPATH sudo -H -u builder bash -c \
"cd $gitPath && makepkg -s --noconfirm --needed"
mkdir -p packages
sudo find $BOTTLEPATH$gitPath -maxdepth 1 -name '*.pkg.tar.*' ! -name '*.sig' -exec cp -v {} packages/ \;
sudo chown -R $(id -u):$(id -g) packages
ls -l packages
- name: Remove Debug Package
run: |
rm -fv packages/*-debug-*.pkg.tar.*
- name: Pack tar
run: |
cd packages
tar -cvf ../arch-${{ matrix.arch }}-$(date +%s).tar *.pkg.tar.*
- name: Push
env:
UPASSWD: ${{ secrets.PASSWD }}
UUSERS: ${{ secrets.USERS }}
UHOST: ${{ secrets.HOST }}
UPATH: ${{ secrets.UPATH }}
UPROGRAM_ARCH: ${{ secrets.UPROGRAM_ARCH }}
UPORT: ${{ secrets.UPORT }}
run: |
if [[ -z "$UPROGRAM_ARCH" ]]; then
echo "::warning::UPROGRAM_ARCH is not set, skip uploading Arch packages"
exit 0
fi
sudo apt update
sudo apt install sshpass -y
mkdir -p ~/.ssh/
ssh-keyscan -p $UPORT -H $UHOST >> ~/.ssh/known_hosts
tarName=$(ls | grep '^arch-.*\.tar$' | head -n 1)
sshpass -p "$UPASSWD" rsync -e "ssh -p $UPORT" $tarName $UUSERS@$UHOST:$UPATH
sshpass -p "$UPASSWD" ssh $UUSERS@$UHOST -p $UPORT $UPROGRAM_ARCH ${{ matrix.arch }} $UPATH/$tarName > /dev/null
- name: Create Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOCKEN_GITHUB }}
with:
files: |
packages/*.pkg.tar.*
@@ -0,0 +1,148 @@
#!/bin/bash
# Copyright (C) 2026 CharOfString <root@charofstring.cc>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
# -----------------------------------------------------------------------------
# 本脚本用于构建GXDE Arch打包环境
# 参数$1 = 架构,可选x86_64/aarch64
# 参数$2 = GXDE仓库地址
# 参数$3 = 源码包仓库地址
# 参数$4 = 当前欲构建的分支
# 参数$5 = GXDE Arch源地址,用于获取GXDE依赖
# -----------------------------------------------------------------------------
# This script is used to configure the packaging environment of GXDE on Arch.
# $1 = Archtecture required, either x86_64 or aarch64.
# $2 = GXDE repository address.
# $3 = Repository path of the software to be built.
# $4 = The branch that you want to build.
# $5 = The Arch PACMAN source of GXDE, we'll use it to install dependencies.
set -e
build_arch=$1
bottle_path=./system-bottle
gxde_arch_repo=${5:-https://repo1.gxde.top/gxde-arch}
# 引用/Works Cited: https://patorjk.com/software/taag/#p=display&f=Linguaholic+Shadow+3D
echo ' ██████╗██╗ ██╗██████╗ ████████╗ ████╗ ' &&
echo '██╔═════╝╚═██╗ ██╔═╝██╔═══██╗██╔═════╝ ██╔═══╝ ████╗ ██╗ ████╗ ' &&
echo '██║ ████╗ ╚═██╔═╝ ██║ ██║██████╗ ██████╗ ██╔═══██╗████╔═══╝ ' &&
echo '██║ ╚═██║ ██╔═██╗ ██║ ██║██╔═══╝ ╚═██╔═╝ ██║ ██║██╔═╝ ' &&
echo '╚═██████║██╔═╝ ╚═██╗██████╔═╝████████╗ ██║ ╚═████╔═╝██║ ' &&
echo ' ╚═════╝╚═╝ ╚═╝╚═════╝ ╚═══════╝ ╚═╝ ╚═══╝ ╚═╝ ' &&
echo ' ' &&
echo ' ' &&
echo ' ████╗ ██╗ ██╗ ██╗ ' &&
echo '██╔═══██╗██╗ ████╗ ██████╗██████╗ ██║ ╚═╝██████╗ ██╗ ██╗██╗ ██╗' &&
echo '████████║████╔═══╝██╔═════╝██╔═══██╗██║ ██╗██╔═══██╗██║ ██║╚═████╔═╝' &&
echo '██╔═══██║██╔═╝ ██║ ██║ ██║██║ ██║██║ ██║██║ ██║ ████║ ' &&
echo '██║ ██║██║ ╚═██████╗██║ ██║████████╗██║██║ ██║╚═██████║██╔═══██╗' &&
echo '╚═╝ ╚═╝╚═╝ ╚═════╝╚═╝ ╚═╝╚═══════╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝'
# 先安装解压chroot用的依赖 ・ Install the dependencies for extracting chroot first.
sudo apt update
sudo apt install wget zstd git -y
# 根据架构下载解压对应chroot ・ Download & extract corresponding chroot by archtecture needed.
echo '[I] (Chroot) Init: Starting to download chroot for Archlinux...'
if [[ $build_arch == "x86_64" ]]; then
echo '[I] (Chroot) Init: Archtecture hit >> AMD64.'
wget -q https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst
sudo tar --zstd -xpf archlinux-bootstrap-x86_64.tar.zst --numeric-owner
sudo mv root.x86_64 $bottle_path
echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' | sudo tee $bottle_path/etc/pacman.d/mirrorlist
keyring=archlinux
elif [[ $build_arch == "aarch64" ]]; then
echo '[I] (Chroot) Init: Archtecture hit >> AARCH64.'
wget -q http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
sudo mkdir -p $bottle_path
sudo tar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C $bottle_path --numeric-owner
keyring=archlinuxarm
else
echo "[E] (Chroot) Init: Unsupportted archtecture $build_arch, HALTED!"
exit 1
fi
echo '[I] (Chroot) Init: Done downloading chroot for Archlinux.'
# 挂载chroot ・ Mount chroot.
echo '[I] (Chroot) Mount: Starting to mount target chroot...'
sudo mount --bind $bottle_path $bottle_path
for i in proc sys dev dev/pts; do
sudo mount --bind /$i $bottle_path/$i
done
# ALARM的resolv.conf是指向/run/systemd/resolve的绝对软链接,需先删除,否则cp会写穿到宿主机且chroot内仍无法解析
# ALARM ships resolv.conf as an absolute symlink into /run/systemd/resolve, remove it first,
# otherwise cp writes through to the host's file and DNS stays broken inside chroot.
sudo rm -f $bottle_path/etc/resolv.conf
sudo cp -L /etc/resolv.conf $bottle_path/etc/resolv.conf
echo '[I] (Chroot) Mount: Done mounting the chroot!'
# Pacman在chroot里无法做沙箱/空间检查
# Pacman is not able to do space check or sandbox in chroot.
echo '[I] (Chroot) PostInit: Disabling sanbox and space check since we are in chroot...'
sudo sed -i 's/^CheckSpace/#CheckSpace/' $bottle_path/etc/pacman.conf
sudo sed -i 's/^#DisableSandbox/DisableSandbox/' $bottle_path/etc/pacman.conf
echo '[I] (Chroot) PostInit: Done disabling unavailable components!'
# 一个小wrapper,在chroot中运行某指令 ・ A wrapper to run certain commands under chroot.
run() {
sudo chroot $bottle_path bash -c "$*"
}
# 写入GXDE Arch源,以便安装dtk等自身提供的依赖
# 新源刚建立时可能还不存在,因此只做可选信任
# --------------------------------------------
# Add GXDE Archlinux PACMAN source to install dependencies such as DTK.
# It may not exist when as we're just getting started, so we will do a Optional TrustAll.
echo '[I] (Chroot) PACMAN: Configuring GXDE pacman source...'
cat << EOF | sudo tee -a $bottle_path/etc/pacman.conf
[gxde]
SigLevel = Optional TrustAll
Server = $gxde_arch_repo/\$arch
EOF
echo '[I] (Chroot) PACMAN: GXDE pacman source has been added to chroot!'
echo '[I] (Chroot) PACMAN: Doing upgrade...'
run pacman-key --init
run pacman-key --populate $keyring
for i in {1..5}; do
# GXDE 源尚不存在时 -Syu 会失败,此时去掉 GXDE 源再试一次
if run pacman -Syu --noconfirm --needed base-devel git sudo; then
break
fi
if [[ $i == 3 ]]; then
echo "GXDE Arch repo unreachable, building without it"
sudo sed -i '/^\[gxde\]/,/^Server/d' $bottle_path/etc/pacman.conf
fi
if [[ $i == 5 ]]; then
echo '[E] (Chroot) PACMAN: Failed to upgrade chroot, HALTED!'
exit 1
fi
sleep 2
done
echo '[I] (Chroot) PACMAN: Shall be okay...'
# makepkg不允许以root运行 ・ makepkg require another account other than root.
echo '[I] (Building) AccountCtl: Setting up builder account...'
run useradd -m builder
echo "builder ALL=(ALL) NOPASSWD: ALL" | sudo tee $bottle_path/etc/sudoers.d/builder
echo '[I] (Building) AccountCtl: Builder account is up!'
# 以builder身份克隆仓库 ・ Clone the repo as builder.
echo '[I] (Building) Builder: Cloning target repository...'
run sudo -H -u builder git clone $3 -b $4 /home/builder/$(basename $3)
echo '[I] (Building) Builder: Done cloning target repository.'
echo '[I] (Env) Setup: Setup finished, bye~'
exit 0
@@ -39,7 +39,7 @@ if [[ $2 == "crimson" ]]; then
useDeepin25 useDeepin25
sudo debootstrap --no-check-gpg --include=git,deepin-keyring,gcc,make,g++,dpkg-dev,qtbase5-dev,ca-certificates --arch=$1 $2 $bottlePath $5 sudo debootstrap --no-check-gpg --include=git,deepin-keyring,gcc,make,g++,dpkg-dev,qtbase5-dev,ca-certificates --arch=$1 $2 $bottlePath $5
else else
sudo debootstrap --no-check-gpg --include=git,gcc,make,debian-ports-archive-keyring,debian-archive-keyring,g++,dpkg-dev,qtbase5-dev,ca-certificates --arch=$1 $2 $bottlePath $5 sudo debootstrap --no-check-gpg --include=git,gcc,make,debian-ports-archive-keyring,debian-archive-keyring,g++,dpkg-dev,qtbase5-dev,ca-certificates,qt6-base-private-dev,qt6-base-dev --arch=$1 $2 $bottlePath $5
fi fi
if [[ $2 == "crimson" ]]; then if [[ $2 == "crimson" ]]; then
+1 -1
View File
@@ -1,6 +1,6 @@
This file contains honored contributers of GXDE and GXDE OS. The list is in alphabetical order. This file contains honored contributers of GXDE and GXDE OS. The list is in alphabetical order.
CharOfString <markus_verify@126.com> CharOfString <root@charofstring.cc>
dependon <liuminghang0821@gmail.com> dependon <liuminghang0821@gmail.com>
elysia <c.elysia@foxmail.com> elysia <c.elysia@foxmail.com>
gfdgd xi <3025613752@qq.com> gfdgd xi <3025613752@qq.com>
+33
View File
@@ -0,0 +1,33 @@
# PKGBUILD for testing purpose.
pkgname=gxde-example
pkgver=0
pkgrel=1
pkgdesc="GXDE example component"
arch=('x86_64' 'aarch64')
url="https://github.com/GXDE-OS/${pkgname}"
license=('GPL-3.0-or-later')
depends=('qt5-base')
makedepends=('git' 'cmake' 'qt5-tools')
source=()
sha256sums=()
_srcdir() {
git -C "$startdir" rev-parse --show-toplevel
}
pkgver() {
head -n 1 "$(_srcdir)/debian/changelog" | sed -E 's/.*\(([^)]*)\).*/\1/; s/^[0-9]+://; s/-/./g'
}
build() {
cmake -B build -S "$(_srcdir)" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
}
package() {
DESTDIR="$pkgdir" cmake --install build
}
+6 -2
View File
@@ -1,4 +1,4 @@
gxde (2026.08.06) UNRELEASED; urgency=medium gxde (2026.10.26) UNRELEASED; urgency=medium
* 新增 remmina 以解决远程问题 * 新增 remmina 以解决远程问题
* 改为安装 dde-printer * 改为安装 dde-printer
@@ -26,8 +26,12 @@ gxde (2026.08.06) UNRELEASED; urgency=medium
* 推荐安装 firmware-atheros | firmware-ath9k-htc * 推荐安装 firmware-atheros | firmware-ath9k-htc
* gxde-desktop-android 指定安装 spark-store 而不是可选安装 aptss * gxde-desktop-android 指定安装 spark-store 而不是可选安装 aptss
* 添加推荐依赖 deepin-liferaft * 添加推荐依赖 deepin-liferaft
* 新增推荐依赖 gxde-dlna-caster
* 新增推荐依赖 gxde-filetransfer
* 新增推荐依赖 gxde-wayland-session, gxdm-emergency-mode, gxde-freewb, fcitx5-theme-deepin
* 移除星火动态壁纸依赖
-- gfdgd_xi <3025613752@qq.com> Thu, 06 Aug 2026 18:08:23 +0800 -- gfdgd_xi <3025613752@qq.com> Mon, 26 Oct 2026 21:57:06 +0800
gxde (2024.10.20) UNRELEASED; urgency=medium gxde (2024.10.20) UNRELEASED; urgency=medium
+6 -2
View File
@@ -34,8 +34,8 @@ Recommends: ${misc:Depends},
deepin-system-monitor, deepin-system-monitor,
gxde-downloader, gxde-downloader,
gparted, gparted,
fantascene-dynamic-wallpaper,
x11vnc, x11vnc,
gxde-dlna-caster,
com.github.minesweep, com.github.minesweep,
2048-qt, 2048-qt,
papirus-icon-theme | gxde-desktop-android, papirus-icon-theme | gxde-desktop-android,
@@ -48,9 +48,14 @@ Recommends: ${misc:Depends},
deepin-log-viewer, deepin-log-viewer,
fcitx5-table-wubi98, fcitx5-table-wubi98,
fcitx5-pinyin-zhwiki, fcitx5-pinyin-zhwiki,
gxde-freewb,
fcitx5-theme-deepin,
dde-cooperation, dde-cooperation,
firmware-atheros, firmware-atheros,
deepin-liferaft, deepin-liferaft,
gxde-wayland-session,
gxde-filetransfer,
gxdm-emergency-mode,
Description: GXDE New Desktop Environment Extra - Next Description: GXDE New Desktop Environment Extra - Next
This is a meta package depends GXDE New Desktop Envrionment Extra. This is a meta package depends GXDE New Desktop Envrionment Extra.
. .
@@ -167,7 +172,6 @@ Recommends:
plymouth-theme-gxde-logo, plymouth-theme-gxde-logo,
fcitx5, fcitx5,
fcitx5-table, fcitx5-table,
fantascene-dynamic-wallpaper,
x11vnc, x11vnc,
apt-is-aptss, apt-is-aptss,
Conflicts: Conflicts:
+4
View File
@@ -0,0 +1,4 @@
# GXDE Arch Linux pacman source
[gxde]
SigLevel = Optional TrustAll
Server = https://repo1.gxde.top/gxde-arch/$arch
+112
View File
@@ -0,0 +1,112 @@
#!/bin/bash
# Copyright (C) 2026 CharOfString <root@charofstring.cc>
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
# -----------------------------------------------------------------------------
# 本脚本用于向GXDE Arch源上传包并更新数据库,由building-pkg.yml自动调用
# 用法:
# arch-repo-update.sh <x86_64|aarch64> <arch-xxx.tar>
# 依赖:
# repo-add、bsdtar、flock (Archlinux自带;Debian上需要安装pacman-package-manager、libarchive-tools)
# 环境变量:
# GXDE_ARCH_REPO_ROOT 源根目录,对外地址为 https://repo1.gxde.top/gxde-arch/$arch
# GXDE_ARCH_GPG_KEY 可选,设置后对包和数据库进行签名
# -----------------------------------------------------------------------------
# This script updates the artifacts in GXDE pacman source and is invoked by
# building-pkg.yml automatically.
# Usage:
# arch-repo-update.sh <x86_64|aarch64> <arch-xxx.tar>
# Dependencies:
# repo-add, bsdtar, flock (Archlinux built-in; on Debian, install pacman-package-manager
# and libarchive-tools)
# Environment variables:
# GXDE_ARCH_REPO_ROOT The root directory of the source, externally accessible at
# https://repo1.gxde.top/gxde-arch/$arch
# GXDE_ARCH_GPG_KEY Optional, if set, will sign the packages and database.
set -e
arch=$1
tar_path=$2
repo_root=${GXDE_ARCH_REPO_ROOT:-/var/www/repo/gxde-arch}
repo_name=gxde
# 引用/Works Cited: https://patorjk.com/software/taag/#p=display&f=Linguaholic+Shadow+3D
echo ' ██████╗██╗ ██╗██████╗ ████████╗ ████╗ ' &&
echo '██╔═════╝╚═██╗ ██╔═╝██╔═══██╗██╔═════╝ ██╔═══╝ ████╗ ██╗ ████╗ ' &&
echo '██║ ████╗ ╚═██╔═╝ ██║ ██║██████╗ ██████╗ ██╔═══██╗████╔═══╝ ' &&
echo '██║ ╚═██║ ██╔═██╗ ██║ ██║██╔═══╝ ╚═██╔═╝ ██║ ██║██╔═╝ ' &&
echo '╚═██████║██╔═╝ ╚═██╗██████╔═╝████████╗ ██║ ╚═████╔═╝██║ ' &&
echo ' ╚═════╝╚═╝ ╚═╝╚═════╝ ╚═══════╝ ╚═╝ ╚═══╝ ╚═╝ ' &&
echo ' ' &&
echo ' ' &&
echo ' ████╗ ██╗ ██╗ ██╗ ' &&
echo '██╔═══██╗██╗ ████╗ ██████╗██████╗ ██║ ╚═╝██████╗ ██╗ ██╗██╗ ██╗' &&
echo '████████║████╔═══╝██╔═════╝██╔═══██╗██║ ██╗██╔═══██╗██║ ██║╚═████╔═╝' &&
echo '██╔═══██║██╔═╝ ██║ ██║ ██║██║ ██║██║ ██║██║ ██║ ████║ ' &&
echo '██║ ██║██║ ╚═██████╗██║ ██║████████╗██║██║ ██║╚═██████║██╔═══██╗' &&
echo '╚═╝ ╚═╝╚═╝ ╚═════╝╚═╝ ╚═╝╚═══════╝╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝'
# repo-add依赖bsdtar读取包,缺失时只会报"is not a package file"
# repo-add needs bsdtar to read packages, without it it only says "is not a package file".
for cmd in repo-add bsdtar flock; do
if ! command -v $cmd > /dev/null; then
echo "$cmd not found, install pacman-package-manager and libarchive-tools" >&2
exit 1
fi
done
case $arch in
x86_64|aarch64) ;;
*) echo "Unsupported arch: $arch" >&2; exit 1 ;;
esac
if [[ ! -f $tar_path ]]; then
echo "$tar_path not found" >&2
exit 1
fi
repoDir=$repo_root/$arch
mkdir -p $repoDir
exec 9> $repoDir/.lock
flock 9
tmpDir=$(mktemp -d)
trap "rm -rf $tmpDir" EXIT
tar -xf $tar_path -C $tmpDir
newPackages=()
for pkg in $tmpDir/*.pkg.tar.*; do
[[ $pkg == *.sig ]] && continue
name=$(basename $pkg)
mv -f $pkg $repoDir/$name
if [[ -n $GXDE_ARCH_GPG_KEY ]]; then
rm -f $repoDir/$name.sig
gpg --batch --yes -u $GXDE_ARCH_GPG_KEY --detach-sign --no-armor $repoDir/$name
fi
newPackages+=($repoDir/$name)
done
if [[ ${#newPackages[@]} == 0 ]]; then
echo "No package in $tar_path" >&2
exit 1
fi
signArgs=()
if [[ -n $GXDE_ARCH_GPG_KEY ]]; then
signArgs=(--sign --key $GXDE_ARCH_GPG_KEY)
fi
repo-add -R "${signArgs[@]}" $repoDir/$repo_name.db.tar.gz "${newPackages[@]}"
rm -f $tar_path