Adding files
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
OUTDIR ?= $(CURDIR)/dist
|
||||
|
||||
.PHONY: srpm rpm clean
|
||||
|
||||
srpm:
|
||||
./scripts/build-srpm.sh "$(OUTDIR)"
|
||||
|
||||
rpm:
|
||||
./scripts/build-rpm.sh "$(OUTDIR)"
|
||||
|
||||
clean:
|
||||
rm -rf "$(OUTDIR)"
|
||||
@@ -0,0 +1,51 @@
|
||||
# Element Desktop RPM packaging
|
||||
|
||||
This repository builds an RPM package from the upstream Element Desktop Linux
|
||||
tarballs:
|
||||
|
||||
- `https://packages.element.io/desktop/install/linux/glibc-x86-64/element-desktop.tar.gz`
|
||||
- `https://packages.element.io/desktop/install/linux/glibc-aarch64/element-desktop.tar.gz`
|
||||
|
||||
Latest upstream version tracked in this repo: `1.12.15`
|
||||
|
||||
## What it does
|
||||
|
||||
- Downloads the current upstream x86_64 and aarch64 tarballs.
|
||||
- Derives the version from both tarball root directories and requires them to
|
||||
match.
|
||||
- Renders a concrete spec file with that version before invoking `rpmbuild`.
|
||||
- Repackages the prebuilt binaries into an RPM.
|
||||
- Removes the upstream auto-update manifest so RPM remains the update path.
|
||||
- Sets `resources/package-type` to `rpm`.
|
||||
- Builds binary RPMs for `x86_64` and `aarch64`, while still forcing SRPM
|
||||
generation to target `x86_64` so COPR source builders stay consistent.
|
||||
- Supports COPR SCM builds through `.copr/Makefile`.
|
||||
|
||||
## Local builds
|
||||
|
||||
Build a source RPM:
|
||||
|
||||
```sh
|
||||
make srpm
|
||||
```
|
||||
|
||||
Build a binary RPM and source RPM:
|
||||
|
||||
```sh
|
||||
make rpm
|
||||
```
|
||||
|
||||
Artifacts are written to `dist/`.
|
||||
|
||||
## COPR
|
||||
|
||||
Use COPR's SCM source type with:
|
||||
|
||||
- Clone URL: this repository
|
||||
- Spec template: `SPECS/element-desktop.spec.in`
|
||||
- SRPM build method: `make srpm`
|
||||
- Enable `x86_64` and `aarch64` binary chroots for this package
|
||||
|
||||
COPR will invoke `.copr/Makefile`, which calls the same SRPM generation script
|
||||
used for local builds. That script downloads the upstream tarball during the
|
||||
SRPM stage, so no vendored source archive is required in git.
|
||||
@@ -0,0 +1,12 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Element
|
||||
Comment=Secure messaging and collaboration
|
||||
Exec=element-desktop %U
|
||||
Icon=element-desktop
|
||||
Terminal=false
|
||||
Categories=Network;InstantMessaging;Chat;
|
||||
StartupWMClass=Element
|
||||
MimeType=x-scheme-handler/element;x-scheme-handler/matrix;x-scheme-handler/matrix.to;
|
||||
Keywords=Matrix;Chat;Messaging;Collaboration;
|
||||
@@ -0,0 +1,64 @@
|
||||
%global debug_package %{nil}
|
||||
%ifarch aarch64
|
||||
%global upstream_dir %{name}-%{version}-arm64
|
||||
%global upstream_source %{SOURCE1}
|
||||
%else
|
||||
%global upstream_dir %{name}-%{version}
|
||||
%global upstream_source %{SOURCE0}
|
||||
%endif
|
||||
|
||||
Name: element-desktop
|
||||
Version: @VERSION@
|
||||
Release: 1%{?dist}
|
||||
Summary: Secure messaging and collaboration desktop client
|
||||
License: Apache-2.0 AND BSD-3-Clause AND MIT
|
||||
URL: https://element.io/
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
Source1: %{name}-%{version}-arm64.tar.gz
|
||||
Source2: %{name}.desktop
|
||||
ExclusiveArch: x86_64 aarch64
|
||||
|
||||
%description
|
||||
Element Desktop is a Matrix client for secure messaging and collaboration.
|
||||
This package repackages the upstream prebuilt Linux x86_64 and aarch64
|
||||
tarballs for RPM-based distributions.
|
||||
|
||||
%prep
|
||||
rm -rf %{upstream_dir}
|
||||
tar -xzf %{upstream_source}
|
||||
cd %{upstream_dir}
|
||||
/usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
|
||||
|
||||
%build
|
||||
# Upstream ships prebuilt binaries in the source archive.
|
||||
|
||||
%install
|
||||
install -d %{buildroot}%{_libdir}/%{name}
|
||||
cp -a . %{buildroot}%{_libdir}/%{name}/
|
||||
|
||||
rm -f %{buildroot}%{_libdir}/%{name}/resources/app-update.yml
|
||||
printf 'rpm\n' > %{buildroot}%{_libdir}/%{name}/resources/package-type
|
||||
|
||||
install -d %{buildroot}%{_bindir}
|
||||
cat > %{buildroot}%{_bindir}/%{name} <<'EOF'
|
||||
#!/bin/sh
|
||||
exec %{_libdir}/%{name}/element-desktop "$@"
|
||||
EOF
|
||||
chmod 0755 %{buildroot}%{_bindir}/%{name}
|
||||
|
||||
install -Dpm 0644 %{SOURCE2} \
|
||||
%{buildroot}%{_datadir}/applications/%{name}.desktop
|
||||
install -Dpm 0644 resources/build/icon.png \
|
||||
%{buildroot}%{_datadir}/icons/hicolor/512x512/apps/%{name}.png
|
||||
|
||||
%files
|
||||
%license LICENSE.electron.txt
|
||||
%doc LICENSES.chromium.html
|
||||
%{_bindir}/%{name}
|
||||
%{_libdir}/%{name}
|
||||
%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/icons/hicolor/512x512/apps/%{name}.png
|
||||
|
||||
%changelog
|
||||
* Mon Apr 27 2026 Codex <codex@openai.com> - @VERSION@-1
|
||||
- Initial RPM packaging for upstream Element Desktop tarballs
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
OUTDIR="${1:-$ROOT_DIR/dist}"
|
||||
RPM_TARGET="${RPM_TARGET:-x86_64}"
|
||||
|
||||
TOPDIR="$(mktemp -d)"
|
||||
cleanup() {
|
||||
rm -rf "$TOPDIR"
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
mkdir -p \
|
||||
"$TOPDIR/BUILD" \
|
||||
"$TOPDIR/BUILDROOT" \
|
||||
"$TOPDIR/RPMS" \
|
||||
"$TOPDIR/SOURCES" \
|
||||
"$TOPDIR/SPECS" \
|
||||
"$TOPDIR/SRPMS" \
|
||||
"$OUTDIR"
|
||||
|
||||
"$ROOT_DIR/scripts/fetch-source.sh" "$TOPDIR/SOURCES" >/dev/null
|
||||
version="$(cat "$TOPDIR/SOURCES/.upstream-version")"
|
||||
|
||||
cp "$ROOT_DIR/SOURCES/element-desktop.desktop" "$TOPDIR/SOURCES/"
|
||||
"$ROOT_DIR/scripts/render-spec.sh" "$version" "$TOPDIR/SPECS/element-desktop.spec"
|
||||
|
||||
rpmbuild -ba \
|
||||
--target "$RPM_TARGET" \
|
||||
--define "_topdir $TOPDIR" \
|
||||
"$TOPDIR/SPECS/element-desktop.spec"
|
||||
|
||||
cp "$TOPDIR/SRPMS/"*.src.rpm "$OUTDIR/"
|
||||
find "$TOPDIR/RPMS" -type f -name '*.rpm' -exec cp {} "$OUTDIR/" \;
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
OUTDIR="${1:-$ROOT_DIR/dist}"
|
||||
RPM_TARGET="${RPM_TARGET:-x86_64}"
|
||||
|
||||
TOPDIR="$(mktemp -d)"
|
||||
cleanup() {
|
||||
rm -rf "$TOPDIR"
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
mkdir -p \
|
||||
"$TOPDIR/BUILD" \
|
||||
"$TOPDIR/BUILDROOT" \
|
||||
"$TOPDIR/RPMS" \
|
||||
"$TOPDIR/SOURCES" \
|
||||
"$TOPDIR/SPECS" \
|
||||
"$TOPDIR/SRPMS" \
|
||||
"$OUTDIR"
|
||||
|
||||
"$ROOT_DIR/scripts/fetch-source.sh" "$TOPDIR/SOURCES" >/dev/null
|
||||
version="$(cat "$TOPDIR/SOURCES/.upstream-version")"
|
||||
|
||||
cp "$ROOT_DIR/SOURCES/element-desktop.desktop" "$TOPDIR/SOURCES/"
|
||||
"$ROOT_DIR/scripts/render-spec.sh" "$version" "$TOPDIR/SPECS/element-desktop.spec"
|
||||
|
||||
rpmbuild -bs \
|
||||
--target "$RPM_TARGET" \
|
||||
--define "_topdir $TOPDIR" \
|
||||
"$TOPDIR/SPECS/element-desktop.spec"
|
||||
|
||||
cp "$TOPDIR/SRPMS/"*.src.rpm "$OUTDIR/"
|
||||
printf '%s\n' "$OUTDIR"/element-desktop-"$version"-1*.src.rpm
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
SOURCE_URL_X86_64="${SOURCE_URL_X86_64:-${SOURCE_URL:-https://packages.element.io/desktop/install/linux/glibc-x86-64/element-desktop.tar.gz}}"
|
||||
SOURCE_URL_AARCH64="${SOURCE_URL_AARCH64:-https://packages.element.io/desktop/install/linux/glibc-aarch64/element-desktop.tar.gz}"
|
||||
OUTDIR="${1:-}"
|
||||
|
||||
if [ -z "$OUTDIR" ]; then
|
||||
echo "usage: $0 OUTDIR" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$OUTDIR"
|
||||
|
||||
tmpdir="$(mktemp -d)"
|
||||
cleanup() {
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
archive_x86_64="$tmpdir/element-desktop-x86_64.tar.gz"
|
||||
archive_aarch64="$tmpdir/element-desktop-aarch64.tar.gz"
|
||||
|
||||
curl -fL "$SOURCE_URL_X86_64" -o "$archive_x86_64"
|
||||
curl -fL "$SOURCE_URL_AARCH64" -o "$archive_aarch64"
|
||||
|
||||
topdir_x86_64="$(tar -tzf "$archive_x86_64" | sed -n '1s#/##p')"
|
||||
topdir_aarch64="$(tar -tzf "$archive_aarch64" | sed -n '1s#/##p')"
|
||||
|
||||
version_x86_64="${topdir_x86_64#element-desktop-}"
|
||||
version_aarch64="${topdir_aarch64#element-desktop-}"
|
||||
version_aarch64="${version_aarch64%-arm64}"
|
||||
|
||||
if [ -z "$version_x86_64" ] || [ "$version_x86_64" = "$topdir_x86_64" ]; then
|
||||
echo "failed to derive x86_64 version from archive root: $topdir_x86_64" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$version_aarch64" ] || [ "$version_aarch64" = "$topdir_aarch64" ]; then
|
||||
echo "failed to derive aarch64 version from archive root: $topdir_aarch64" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$version_x86_64" != "$version_aarch64" ]; then
|
||||
echo "upstream version mismatch: x86_64=$version_x86_64 aarch64=$version_aarch64" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dest_x86_64="$OUTDIR/element-desktop-$version_x86_64.tar.gz"
|
||||
dest_aarch64="$OUTDIR/element-desktop-$version_x86_64-arm64.tar.gz"
|
||||
|
||||
cp "$archive_x86_64" "$dest_x86_64"
|
||||
cp "$archive_aarch64" "$dest_aarch64"
|
||||
printf '%s\n' "$version_x86_64" > "$OUTDIR/.upstream-version"
|
||||
printf '%s\n%s\n' "$dest_x86_64" "$dest_aarch64"
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
VERSION="${1:-}"
|
||||
OUTFILE="${2:-}"
|
||||
TEMPLATE="$ROOT_DIR/SPECS/element-desktop.spec.in"
|
||||
|
||||
if [ -z "$VERSION" ] || [ -z "$OUTFILE" ]; then
|
||||
echo "usage: $0 VERSION OUTFILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sed "s/@VERSION@/$VERSION/g" "$TEMPLATE" > "$OUTFILE"
|
||||
Reference in New Issue
Block a user