From 74164e348b2c57dd98bfe4245540f6df67fb1c67 Mon Sep 17 00:00:00 2001 From: Evangelos Foutras Date: Mon, 7 Mar 2022 15:41:17 +0200 Subject: makepkg.conf: set LTOFLAGS="-flto=auto" For use with pacman 6.0.1-4 which backports support for LTOFLAGS in order to speed up builds that use gcc as the compiler. This is less useful when clang is used, though a hack would be to specify in the PKGBUILD `LTOFLAGS="-flto=thin"` (outside of any function). --- makepkg-x86_64.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/makepkg-x86_64.conf b/makepkg-x86_64.conf index 19d16f7..7725296 100644 --- a/makepkg-x86_64.conf +++ b/makepkg-x86_64.conf @@ -45,6 +45,7 @@ CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ -fstack-clash-protection -fcf-protection" CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" +LTOFLAGS="-flto=auto" #RUSTFLAGS="-C opt-level=2" #-- Make Flags: change this for DistCC/SMP systems #MAKEFLAGS="-j2" -- cgit v1.2.3-54-g00ecf From 82cb6756aadd6f03cbefd46132675068a47efdae Mon Sep 17 00:00:00 2001 From: Haochen Tong Date: Wed, 2 Feb 2022 21:51:59 +0800 Subject: sogrep: fail if links database cannot be retrieved If the links database (for some reason) does not exist on the mirror, curl will save the html 404 page as ${repo}.links.tar.gz in the cache, and sogrep will later fail with a decompression error from bsdtar. This patch adds -f to curl so it doesn't save the error page, and exit after displaying an error in such case. Fixes !88 Signed-off-by: Haochen Tong Signed-off-by: Levente Polyak --- sogrep.in | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sogrep.in b/sogrep.in index dfdd104..d1ca1a1 100755 --- a/sogrep.in +++ b/sogrep.in @@ -36,8 +36,11 @@ recache() { local dbpath=${SOCACHE_DIR}/${arch}/${repo}.links.tar.gz mkdir -p "${dbpath%/*}" (( VERBOSE )) && echo "Fetching ${repo}.links.tar.gz..." - curl -LR "${verbosity}" -o "${dbpath}" -z "${dbpath}" \ - "${SOLINKS_MIRROR}/${repo}/os/${arch}/${repo}.links.tar.gz" + if ! curl -fLR "${verbosity}" -o "${dbpath}" -z "${dbpath}" \ + "${SOLINKS_MIRROR}/${repo}/os/${arch}/${repo}.links.tar.gz"; then + echo "error: failed to download links database for repo ${repo}" + exit 1 + fi done done } -- cgit v1.2.3-54-g00ecf From 54acc5872c74832a23931d86396e5f44439cdada Mon Sep 17 00:00:00 2001 From: Leonidas Spyropoulos Date: Thu, 27 Jan 2022 13:14:09 +0000 Subject: build: enable gitlab-ci Closes #85 Signed-off-by: Levente Polyak --- .github/workflows/test.yml | 15 --------------- .gitlab-ci.yml | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) delete mode 100644 .github/workflows/test.yml create mode 100644 .gitlab-ci.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 300d8c0..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,15 +0,0 @@ -on: push -jobs: - test: - runs-on: ubuntu-latest - container: archlinux/archlinux:latest - steps: - - name: Install dependencies - run: pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoc shellcheck - - uses: actions/checkout@v2 - - name: Run tests - run: | - make PREFIX=/usr - make PREFIX=/usr DESTDIR="$(mktemp -d)" install - make check || true - SHELLCHECK_OPTS="-S error" make check diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..3a75540 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,21 @@ +image: "archlinux:latest" + +stages: + - build + - test + +build: + stage: build + needs: [] + script: + - pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoc + - make PREFIX=/usr + - make PREFIX=/usr DESTDIR=build install + +check: + stage: test + needs: [] + script: + - pacman -Syu --noconfirm m4 make openssh subversion rsync arch-install-scripts git bzr mercurial diffutils asciidoc shellcheck + - make check || true + - SHELLCHECK_OPTS="-S error" make check -- cgit v1.2.3-54-g00ecf From c52fab256242168ddb678c0548c330aa3fdbc57c Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Tue, 17 May 2022 20:57:32 +0200 Subject: make: remove bash completion symlinks on uninstall --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index f763283..94fe1ea 100644 --- a/Makefile +++ b/Makefile @@ -131,6 +131,7 @@ uninstall: for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${CROSSREPOMOVE_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done + for l in ${BASHCOMPLETION_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$$l; done rm $(DESTDIR)/usr/share/bash-completion/completions/devtools rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools rm -f $(DESTDIR)$(PREFIX)/bin/communityco -- cgit v1.2.3-54-g00ecf From f42b032c5ed0b45d56742318bc34c64ecd961ccb Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Tue, 17 May 2022 21:02:10 +0200 Subject: make: respect PREFIX for bash completion instead of hardcoded /usr --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 94fe1ea..b6cb6de 100644 --- a/Makefile +++ b/Makefile @@ -116,8 +116,8 @@ install: for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${CROSSREPOMOVE_LINKS}; do ln -sf crossrepomove $(DESTDIR)$(PREFIX)/bin/$$l; done ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides - install -Dm0644 bash_completion $(DESTDIR)/usr/share/bash-completion/completions/devtools - for l in ${BASHCOMPLETION_LINKS}; do ln -sf devtools $(DESTDIR)/usr/share/bash-completion/completions/$$l; done + install -Dm0644 bash_completion $(DESTDIR)$(PREFIX)/share/bash-completion/completions/devtools + for l in ${BASHCOMPLETION_LINKS}; do ln -sf devtools $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$$l; done install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco for manfile in $(MANS); do \ @@ -132,7 +132,7 @@ uninstall: for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${CROSSREPOMOVE_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done for l in ${BASHCOMPLETION_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/share/bash-completion/completions/$$l; done - rm $(DESTDIR)/usr/share/bash-completion/completions/devtools + rm $(DESTDIR)$(PREFIX)/share/bash-completion/completions/devtools rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools rm -f $(DESTDIR)$(PREFIX)/bin/communityco rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides -- cgit v1.2.3-54-g00ecf From 11edc4504867579e11e90557d8707875f6284431 Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Fri, 22 Apr 2022 21:40:20 +0200 Subject: diffpkg - diff repo vs. build package Include a new tool as alternative to checkpkg, this runs diffoscope on a newly build package and the current repository package. This can be useful for finding new files / binaries. --- .gitignore | 1 + Makefile | 2 + diffpkg.in | 125 +++++++++++++++++++++++++++++++++++++++++++++++++ doc/diffpkg.1.asciidoc | 33 +++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 diffpkg.in create mode 100644 doc/diffpkg.1.asciidoc diff --git a/.gitignore b/.gitignore index b26fc93..66e2213 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ archrelease bash_completion checkpkg commitpkg +diffpkg finddeps lddd makechrootpkg diff --git a/Makefile b/Makefile index b6cb6de..69eabe9 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ IN_PROGS = \ checkpkg \ commitpkg \ crossrepomove\ + diffpkg \ finddeps \ find-libdeps \ lddd \ @@ -76,6 +77,7 @@ MANS = \ doc/makechrootpkg.1 \ doc/lddd.1 \ doc/checkpkg.1 \ + doc/diffpkg.1 \ doc/offload-build.1 \ doc/sogrep.1 \ doc/makerepropkg.1 \ diff --git a/diffpkg.in b/diffpkg.in new file mode 100644 index 0000000..23c1f81 --- /dev/null +++ b/diffpkg.in @@ -0,0 +1,125 @@ +#!/bin/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +shopt -s extglob + +m4_include(lib/common.sh) + +usage() { + cat <<- _EOF_ + Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] + + Searches for a locally built package corresponding to the PKGBUILD, and + downloads the last version of that package from the Pacman repositories. + It then compares them with diffoscope. + + OPTIONS + -M, --makepkg-config Set an alternate makepkg configuration file + -h, --help Show this help text +_EOF_ +} + +MAKEPKG_CONF=/etc/makepkg.conf + +# option checking +while (( $# )); do + case $1 in + -h|--help) + usage + exit 0 + ;; + -M|--makepkg-config) + MAKEPKG_CONF="$2" + shift 2 + ;; + --) + shift + break + ;; + -*,--*) + die "invalid argument: %s" "$1" + ;; + *) + break + ;; + esac +done + +# Source makepkg.conf; fail if it is not found +if [[ -r "${MAKEPKG_CONF}" ]]; then + # shellcheck source=makepkg-x86_64.conf + source "${MAKEPKG_CONF}" +else + die "${MAKEPKG_CONF} not found!" +fi + +# Source user-specific makepkg.conf overrides +if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then + # shellcheck source=/dev/null + source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" +elif [[ -r "$HOME/.makepkg.conf" ]]; then + # shellcheck source=/dev/null + source "$HOME/.makepkg.conf" +fi + +if [[ ! -f PKGBUILD ]]; then + die 'This must be run in the directory of a built package.' +fi + +# shellcheck source=PKGBUILD.proto +. ./PKGBUILD +if [[ ${arch[0]} == 'any' ]]; then + CARCH='any' +fi + +STARTDIR=$(pwd) +trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT +TEMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXX) + +for _pkgname in "${pkgname[@]}"; do + comparepkg=$_pkgname + pkgurl= + target_pkgver=$(get_full_version "$_pkgname") + if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then + die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" + fi + + ln -s "$pkgfile" "$TEMPDIR" + + if (( $# )); then + case $1 in + *://*) + pkgurl=$1 ;; + /*|*/*) + pkgurl=$(readlink -m "$1") ;; + *.pkg.tar*) + pkgurl=$1 ;; + '') + ;; + *) + comparepkg=$1 ;; + esac + shift + fi + [[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") || + die "Couldn't download previous package for %s." "$comparepkg" + + oldpkg=${pkgurl##*/} + + if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then + die "The built package (%s) is the one in the repo right now!" "$_pkgname" + fi + + if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then + ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg" + elif [[ -f "$PKGDEST/$oldpkg" ]]; then + ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg" + elif [[ -f "$STARTDIR/$oldpkg" ]]; then + ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg" + else + curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" + fi + + diffoscope $TEMPDIR/$oldpkg $pkgfile +done diff --git a/doc/diffpkg.1.asciidoc b/doc/diffpkg.1.asciidoc new file mode 100644 index 0000000..fe11872 --- /dev/null +++ b/doc/diffpkg.1.asciidoc @@ -0,0 +1,33 @@ +diffpkg(1) +=========== + +Name +---- +diffpkg - Diffoscope the current build package with the repository version + +Synopsis +-------- +diffpkg + +Description +----------- + +Searches for a locally built package corresponding to the PKGBUILD, and +downloads the last version of that package from the Pacman repositories. +It then compares them with diffoscope. + +Options +------- + +*-M, --makepkg-config*:: + Set an alternate makepkg configuration file. + +*-h, --help*:: + Show a help text + +See Also +-------- + +linkman:find-libprovides[1] + +include::footer.asciidoc[] -- cgit v1.2.3-54-g00ecf From c339536a37e9d3211b4732d7996b7a3f89289ba7 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Tue, 26 Apr 2022 22:31:56 +0200 Subject: diffpkg: support multiple diff modes to compare with This adds support for the following diff modes: - content list (default) - diffoscope - .PKGINFO diff - .BUILDINFO diff --- diffpkg.in | 83 +++++++++++++++++++++++++++++++++++++++++++++++--- doc/diffpkg.1.asciidoc | 29 ++++++++++++++---- zsh_completion.in | 12 +++++++- 3 files changed, 113 insertions(+), 11 deletions(-) diff --git a/diffpkg.in b/diffpkg.in index 23c1f81..977a767 100644 --- a/diffpkg.in +++ b/diffpkg.in @@ -8,19 +8,32 @@ m4_include(lib/common.sh) usage() { cat <<- _EOF_ - Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] + Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] [MODES] Searches for a locally built package corresponding to the PKGBUILD, and downloads the last version of that package from the Pacman repositories. - It then compares them with diffoscope. + It then compares them using different modes while using simple tar + content list by default. OPTIONS -M, --makepkg-config Set an alternate makepkg configuration file + -v, --verbose Provide more detailed/unfiltered output -h, --help Show this help text + + MODES + -l, --list Activate content list diff mode (default) + -d, --diffoscope Activate diffoscope diff mode + -p, --pkginfo Activate .PKGINFO diff mode + -b, --buildinfo Activate .BUILDINFO diff mode _EOF_ } MAKEPKG_CONF=/etc/makepkg.conf +VERBOSE=0 +TARLIST=0 +DIFFOSCOPE=0 +PKGINFO=0 +BUILDINFO=0 # option checking while (( $# )); do @@ -33,6 +46,26 @@ while (( $# )); do MAKEPKG_CONF="$2" shift 2 ;; + -l|--list) + TARLIST=1 + shift + ;; + -d|--diffoscope) + DIFFOSCOPE=1 + shift + ;; + -p|--pkginfo) + PKGINFO=1 + shift + ;; + -b|--buildinfo) + BUILDINFO=1 + shift + ;; + -v|--verbose) + VERBOSE=1 + shift + ;; --) shift break @@ -46,6 +79,10 @@ while (( $# )); do esac done +if ! (( DIFFOSCOPE || TARLIST || PKGINFO || BUILDINFO )); then + TARLIST=1 +fi + # Source makepkg.conf; fail if it is not found if [[ -r "${MAKEPKG_CONF}" ]]; then # shellcheck source=makepkg-x86_64.conf @@ -75,7 +112,45 @@ fi STARTDIR=$(pwd) trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT -TEMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXX) +TEMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXXXXXX) + +tar_list() { + bsdtar tf "$*" | if (( VERBOSE )); then + cat + else + sed -E 's|^usr/lib/modules/[0-9][^/]+|usr/lib/modules/[…]|g' + fi | sort +} + +diff_pkgs() { + local oldpkg=$1 + local newpkg=$2 + + if (( TARLIST )); then + tar_list "$oldpkg" > "$TEMPDIR/filelist-old" + tar_list "$newpkg" > "$TEMPDIR/filelist" + + sdiff -s "$TEMPDIR/filelist-old" "$TEMPDIR/filelist" + fi + + if (( PKGINFO )); then + bsdtar xOqf "$oldpkg" .PKGINFO > "$TEMPDIR/pkginfo-old" + bsdtar xOqf "$newpkg" .PKGINFO > "$TEMPDIR/pkginfo" + + sdiff -s "$TEMPDIR/pkginfo-old" "$TEMPDIR/pkginfo" + fi + + if (( BUILDINFO )); then + bsdtar xOqf "$oldpkg" .BUILDINFO > "$TEMPDIR/buildinfo-old" + bsdtar xOqf "$newpkg" .BUILDINFO > "$TEMPDIR/buildinfo" + + sdiff -s "$TEMPDIR/buildinfo-old" "$TEMPDIR/buildinfo" + fi + + if (( DIFFOSCOPE )); then + diffoscope "$(readlink -e "$oldpkg")" "$(readlink -e "$newpkg")" + fi +} for _pkgname in "${pkgname[@]}"; do comparepkg=$_pkgname @@ -121,5 +196,5 @@ for _pkgname in "${pkgname[@]}"; do curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" fi - diffoscope $TEMPDIR/$oldpkg $pkgfile + diff_pkgs "$TEMPDIR/$oldpkg" "$pkgfile" done diff --git a/doc/diffpkg.1.asciidoc b/doc/diffpkg.1.asciidoc index fe11872..e95fa43 100644 --- a/doc/diffpkg.1.asciidoc +++ b/doc/diffpkg.1.asciidoc @@ -3,31 +3,48 @@ diffpkg(1) Name ---- -diffpkg - Diffoscope the current build package with the repository version +diffpkg - Compare package files using different modes. Synopsis -------- -diffpkg +diffpkg [OPTIONS] [MODES] Description ----------- Searches for a locally built package corresponding to the PKGBUILD, and downloads the last version of that package from the Pacman repositories. -It then compares them with diffoscope. +It then compares them using different modes while using simple tar +content list by default. Options ------- *-M, --makepkg-config*:: - Set an alternate makepkg configuration file. + Set an alternate makepkg configuration file + +*-v, --verbose*:: + Provide more detailed/unfiltered output *-h, --help*:: Show a help text +Modes +----- + +*-l, --list*:: + Activate tar content list diff mode (default) + +*-d, --diffoscope*:: + Activate diffoscope diff mode + +*-p, --pkginfo*:: + Activate .PKGINFO diff mode + +*-b, --buildinfo*:: + Activate .BUILDINFO diff mode + See Also -------- -linkman:find-libprovides[1] - include::footer.asciidoc[] diff --git a/zsh_completion.in b/zsh_completion.in index f640086..c76e66e 100644 --- a/zsh_completion.in +++ b/zsh_completion.in @@ -1,4 +1,4 @@ -#compdef archbuild archco arch-nspawn archrelease commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-x86_64-build=archbuild testing-x86_64-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco checkpkg sogrep offload-build makerepropkg +#compdef archbuild archco arch-nspawn archrelease commitpkg diffpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-x86_64-build=archbuild testing-x86_64-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco checkpkg sogrep offload-build makerepropkg # # SPDX-License-Identifier: GPL-3.0-or-later @@ -41,6 +41,16 @@ _commitpkg_args=( '1:commit_msg' ) +_diffpkg_args=( + '(-l --list)'{-l,--list}'[Tar content list diff mode]' + '(-d --diffoscope)'{-d,--diffoscope}'[Diffoscope diff mode]' + '(-p --pkginfo)'{-p,--pkginfo}'[.PKGINFO diff mode]' + '(-b --buildinfo)'{-b,--buildinfo}'[.BUILDINFO diff mode]' + '(-m --makepkg-config)'{-m,--makepkg-config}'[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"' + '(-v --verbose)'{-v,--verbose}'[Provide more detailed/unfiltered output]' + '(-h --help)'{-h,--help}'[Display usage]' +) + _finddeps_args=( '1:packages:_devtools_completions_all_packages' ) -- cgit v1.2.3-54-g00ecf From c2f163b6408fb69c2b85da17d7656cd75ac5449d Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Thu, 28 Apr 2022 01:13:02 +0200 Subject: diffpkg: support comparing two given package archives This adds support similar to diffpkg from the infrastructure repo that is based on the assumption that two archives can be passed to the tooling in order to compare them. --- diffpkg.in | 158 +++++++++++++++++++++++++++++-------------------- doc/diffpkg.1.asciidoc | 13 +++- zsh_completion.in | 1 + 3 files changed, 104 insertions(+), 68 deletions(-) diff --git a/diffpkg.in b/diffpkg.in index 977a767..840567a 100644 --- a/diffpkg.in +++ b/diffpkg.in @@ -8,12 +8,19 @@ m4_include(lib/common.sh) usage() { cat <<- _EOF_ - Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] [MODES] + Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] [MODES] [FILE|PKGNAME...] Searches for a locally built package corresponding to the PKGBUILD, and downloads the last version of that package from the Pacman repositories. - It then compares them using different modes while using simple tar - content list by default. + It then compares the package archives using different modes while using + simple tar content list by default. + + When given one package, use it to diff against the locally built one. + When given two packages, diff both packages against each other. + + In either case, a package name will be converted to a filename from the + cache, and diffpkg will proceed as though this filename was initially + specified. OPTIONS -M, --makepkg-config Set an alternate makepkg configuration file @@ -100,19 +107,10 @@ elif [[ -r "$HOME/.makepkg.conf" ]]; then source "$HOME/.makepkg.conf" fi -if [[ ! -f PKGBUILD ]]; then - die 'This must be run in the directory of a built package.' -fi - -# shellcheck source=PKGBUILD.proto -. ./PKGBUILD -if [[ ${arch[0]} == 'any' ]]; then - CARCH='any' -fi - STARTDIR=$(pwd) -trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT -TEMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXXXXXX) +trap 'rm -rf $TMPDIR' EXIT INT TERM QUIT +TMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXXXXXX) +export TMPDIR tar_list() { bsdtar tf "$*" | if (( VERBOSE )); then @@ -123,78 +121,108 @@ tar_list() { } diff_pkgs() { - local oldpkg=$1 - local newpkg=$2 + local oldpkg newpkg + oldpkg=$(readlink -m "$1") + newpkg=$(readlink -m "$2") + + [[ -f $oldpkg ]] || die "No such file: %s" "${oldpkg}" + [[ -f $newpkg ]] || die "No such file: %s" "${newpkg}" if (( TARLIST )); then - tar_list "$oldpkg" > "$TEMPDIR/filelist-old" - tar_list "$newpkg" > "$TEMPDIR/filelist" + tar_list "$oldpkg" > "$TMPDIR/filelist-old" + tar_list "$newpkg" > "$TMPDIR/filelist" - sdiff -s "$TEMPDIR/filelist-old" "$TEMPDIR/filelist" + sdiff -s "$TMPDIR/filelist-old" "$TMPDIR/filelist" fi if (( PKGINFO )); then - bsdtar xOqf "$oldpkg" .PKGINFO > "$TEMPDIR/pkginfo-old" - bsdtar xOqf "$newpkg" .PKGINFO > "$TEMPDIR/pkginfo" + bsdtar xOqf "$oldpkg" .PKGINFO > "$TMPDIR/pkginfo-old" + bsdtar xOqf "$newpkg" .PKGINFO > "$TMPDIR/pkginfo" - sdiff -s "$TEMPDIR/pkginfo-old" "$TEMPDIR/pkginfo" + sdiff -s "$TMPDIR/pkginfo-old" "$TMPDIR/pkginfo" fi if (( BUILDINFO )); then - bsdtar xOqf "$oldpkg" .BUILDINFO > "$TEMPDIR/buildinfo-old" - bsdtar xOqf "$newpkg" .BUILDINFO > "$TEMPDIR/buildinfo" + bsdtar xOqf "$oldpkg" .BUILDINFO > "$TMPDIR/buildinfo-old" + bsdtar xOqf "$newpkg" .BUILDINFO > "$TMPDIR/buildinfo" - sdiff -s "$TEMPDIR/buildinfo-old" "$TEMPDIR/buildinfo" + sdiff -s "$TMPDIR/buildinfo-old" "$TMPDIR/buildinfo" fi if (( DIFFOSCOPE )); then - diffoscope "$(readlink -e "$oldpkg")" "$(readlink -e "$newpkg")" + diffoscope "$oldpkg" "$newpkg" fi } -for _pkgname in "${pkgname[@]}"; do - comparepkg=$_pkgname - pkgurl= - target_pkgver=$(get_full_version "$_pkgname") - if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then - die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" - fi +fetch_pkg() { + local pkg pkgdest pkgurl + case $1 in + *://*) + pkgurl=$1 ;; + /*|*/*) + pkgurl=$(readlink -m "$1") ;; + *.pkg.tar*) + pkgurl=$1 ;; + '') + ;; + *) + pkg=$1 ;; + esac + + [[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$pkg") || + die "Couldn't download previous package for %s." "$pkg" + + pkg=${pkgurl##*/} + pkgdest=$(mktemp -t -d "${pkg}-XXXXXX")/${pkg} - ln -s "$pkgfile" "$TEMPDIR" - - if (( $# )); then - case $1 in - *://*) - pkgurl=$1 ;; - /*|*/*) - pkgurl=$(readlink -m "$1") ;; - *.pkg.tar*) - pkgurl=$1 ;; - '') - ;; - *) - comparepkg=$1 ;; - esac - shift + if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then + ln -sf "${pkgurl#file://}" "$pkgdest" + elif [[ -f "$PKGDEST/$pkg" ]]; then + ln -sf "$PKGDEST/$pkg" "$pkgdest" + elif [[ -f "$STARTDIR/$pkg" ]]; then + ln -sf "$STARTDIR/$pkg" "$pkgdest" + elif [[ $pkgurl = *://* ]]; then + curl -fsLC - --retry 3 --retry-delay 3 -o "$pkgdest" "$pkgurl" || \ + die "Couldn't download %s" "$pkgurl" + else + die "File not found: %s" "$pkgurl" fi - [[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") || - die "Couldn't download previous package for %s." "$comparepkg" - oldpkg=${pkgurl##*/} + echo "$pkgdest" +} - if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then - die "The built package (%s) is the one in the repo right now!" "$_pkgname" +if (( $# < 2 )); then + if [[ ! -f PKGBUILD ]]; then + die "This must be run in the directory of a built package.\nTry '$(basename "$0") --help' for more information." fi - if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then - ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg" - elif [[ -f "$PKGDEST/$oldpkg" ]]; then - ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg" - elif [[ -f "$STARTDIR/$oldpkg" ]]; then - ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg" - else - curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" + # shellcheck source=PKGBUILD.proto + . ./PKGBUILD + if [[ ${arch[0]} == 'any' ]]; then + CARCH='any' fi - diff_pkgs "$TEMPDIR/$oldpkg" "$pkgfile" -done + for _pkgname in "${pkgname[@]}"; do + comparepkg=$_pkgname + pkgurl= + target_pkgver=$(get_full_version "$_pkgname") + if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then + die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" + fi + + ln -s "$pkgfile" "$TMPDIR" + + if (( $# )); then + comparepkg="$1" + fi + + oldpkg=$(fetch_pkg "$comparepkg") || exit 1 + + diff_pkgs "$oldpkg" "$pkgfile" + done +else + file1=$(fetch_pkg "$1") || exit 1 + file2=$(fetch_pkg "$2") || exit 1 + + diff_pkgs "$file1" "$file2" +fi diff --git a/doc/diffpkg.1.asciidoc b/doc/diffpkg.1.asciidoc index e95fa43..3fc0f00 100644 --- a/doc/diffpkg.1.asciidoc +++ b/doc/diffpkg.1.asciidoc @@ -7,15 +7,22 @@ diffpkg - Compare package files using different modes. Synopsis -------- -diffpkg [OPTIONS] [MODES] +diffpkg [OPTIONS] [MODES] [FILE|PKGNAME...] Description ----------- Searches for a locally built package corresponding to the PKGBUILD, and downloads the last version of that package from the Pacman repositories. -It then compares them using different modes while using simple tar -content list by default. +It then compares the package archives using different modes while using +simple tar content list by default. + +When given one package, use it to diff against the locally built one. +When given two packages, diff both packages against each other. + +In either case, a package name will be converted to a filename from the +cache, and diffpkg will proceed as though this filename was initially +specified. Options ------- diff --git a/zsh_completion.in b/zsh_completion.in index c76e66e..eee9776 100644 --- a/zsh_completion.in +++ b/zsh_completion.in @@ -49,6 +49,7 @@ _diffpkg_args=( '(-m --makepkg-config)'{-m,--makepkg-config}'[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"' '(-v --verbose)'{-v,--verbose}'[Provide more detailed/unfiltered output]' '(-h --help)'{-h,--help}'[Display usage]' + '*:packages:_devtools_completions_all_packages' ) _finddeps_args=( -- cgit v1.2.3-54-g00ecf From 0c61761f33b2cb7613720596ed9373ab0872df31 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Fri, 18 Feb 2022 13:35:43 +0000 Subject: mkarchroot: unshare mount namespace to avoid broken root chroot creation While `extra-x86_64-build -c` is running `pacstrap` and has `/var/lib/archbuild/extra-x86_64/root/run` mounted, another user logs in, thus creating a new mountpoint `/run/user/$uid` that propagates into `/var/lib/archbuild/extra-x86_64/root/run/user/$uid` leading to a broken root chroot. Successive `extra-x86_64-build -c` calls will result in cleanup errors: ``` $ extra-x86_64-build -c ==> Creating chroot for [extra] (x86_64)... -> Deleting chroot copy 'root'... rm: skipping '/var/lib/archbuild/extra-x86_64/root/run', since it's on a different device rm: skipping '/var/lib/archbuild/extra-x86_64/root/run', since it's on a different device ==> ERROR: Working directory '/var/lib/archbuild/extra-x86_64/root' already exists ==> ERROR: Aborting... ``` Reported by and patch adjusted from archlinuxcn. Fixes FS#64698 --- mkarchroot.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkarchroot.in b/mkarchroot.in index 3e08af2..8fb52ac 100644 --- a/mkarchroot.in +++ b/mkarchroot.in @@ -81,7 +81,7 @@ for file in "${files[@]}"; do cp "$file" "$working_dir$file" done -pacstrap -${umode}Mcd ${pac_conf:+-C "$pac_conf"} "$working_dir" \ +unshare --mount pacstrap -${umode}Mcd ${pac_conf:+-C "$pac_conf"} "$working_dir" \ "${cache_dirs[@]/#/--cachedir=}" "$@" || die 'Failed to install all packages' printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen" -- cgit v1.2.3-54-g00ecf From 5e98478344fbdecd5f07eb92ef92ee43bc66e1a9 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Fri, 27 May 2022 02:45:06 +0000 Subject: mkarchroot: generate and use C.UTF-8 by default systemd >= 251 is forcing nspawns to use LANG=C.UTF-8: https://github.com/systemd/systemd/commit/b626f6959bcee11d966f96bd29a00502f4aa2ce4 It makes sense to generate the C.UTF-8 locate here when using it as the default LANG value. Related to: https://bugs.archlinux.org/task/74864 --- mkarchroot.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkarchroot.in b/mkarchroot.in index 8fb52ac..d199bed 100644 --- a/mkarchroot.in +++ b/mkarchroot.in @@ -84,8 +84,8 @@ done unshare --mount pacstrap -${umode}Mcd ${pac_conf:+-C "$pac_conf"} "$working_dir" \ "${cache_dirs[@]/#/--cachedir=}" "$@" || die 'Failed to install all packages' -printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen" -echo 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf" +printf '%s.UTF-8 UTF-8\n' C en_US de_DE > "$working_dir/etc/locale.gen" +echo 'LANG=C.UTF-8' > "$working_dir/etc/locale.conf" echo "$CHROOT_VERSION" > "$working_dir/.arch-chroot" systemd-machine-id-setup --root="$working_dir" -- cgit v1.2.3-54-g00ecf From d00a28ea0ed981d47634504c3eb67c5b8870bc62 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Tue, 29 Mar 2022 19:36:16 +1000 Subject: Export source PGPs from PKGBUILD on commit Provide a tool to export keys listed in the PKGBUILDs validpgpkeys to keys/pgp/$fingerprint.asc. The presense of the "keys" directory alongside the PKGBUILD in trunk/ is tested during commitpkg. If the directory is abscent, keys are exported and added to the commit. If the directory is present, a check is made to ensure all valid PGP keys are provided. Signed-off-by: Allan McRae Signed-off-by: Levente Polyak --- .gitignore | 1 + Makefile | 2 ++ commitpkg.in | 18 +++++++++++ doc/export-pkgbuild-keys.asciidoc | 25 ++++++++++++++ export-pkgbuild-keys.in | 68 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 doc/export-pkgbuild-keys.asciidoc create mode 100644 export-pkgbuild-keys.in diff --git a/.gitignore b/.gitignore index 66e2213..c661fc5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ bash_completion checkpkg commitpkg diffpkg +export-pkgbuild-keys finddeps lddd makechrootpkg diff --git a/Makefile b/Makefile index 69eabe9..40abda9 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ IN_PROGS = \ commitpkg \ crossrepomove\ diffpkg \ + export-pkgbuild-keys \ finddeps \ find-libdeps \ lddd \ @@ -74,6 +75,7 @@ BASHCOMPLETION_LINKS = \ MANS = \ doc/archbuild.1 \ doc/arch-nspawn.1 \ + doc/export-pkgbuild-keys.1 \ doc/makechrootpkg.1 \ doc/lddd.1 \ doc/checkpkg.1 \ diff --git a/commitpkg.in b/commitpkg.in index 928e638..e0da32d 100644 --- a/commitpkg.in +++ b/commitpkg.in @@ -48,6 +48,21 @@ case "$cmd" in ;; esac + +if (( ${#validpgpkeys[@]} != 0 )); then + if [[ -d keys ]]; then + for key in "${validpgpkeys[@]}"; do + if [[ ! -f keys/pgp/$key.asc ]]; then + export-pkgbuild-keys || die 'Failed to export valid PGP keys for source files' + fi + done + else + export-pkgbuild-keys || die 'Failed to export valid PGP keys for source files' + fi + + svn add --parents --force keys/pgp/* +fi + # find files which should be under source control needsversioning=() for s in "${source[@]}"; do @@ -60,6 +75,9 @@ for i in 'changelog' 'install'; do needsversioning+=("$file") done < <(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD) done +for key in "${validpgpkeys[@]}"; do + needsversioning+=("keys/pgp/$key.asc") +done # assert that they really are controlled by SVN if (( ${#needsversioning[*]} )); then diff --git a/doc/export-pkgbuild-keys.asciidoc b/doc/export-pkgbuild-keys.asciidoc new file mode 100644 index 0000000..9c47515 --- /dev/null +++ b/doc/export-pkgbuild-keys.asciidoc @@ -0,0 +1,25 @@ +export-pkgbuild-keys(1) +======================= + +Name +---- +export-pkgbuild-keys - Export valid source signing keys from a PKGBUILD + +Synopsis +-------- +export-pkgbuild-keys + +Description +----------- + +Export the PGP keys from a PKGBUILDs validpgpkeys array into the keys/pgp/ +subdirectory. Useful for distributing packager validated source signing +keys alongside PKGBUILDs. + +Options +------- + +*-h, --help*:: + Show a help text. + +include::footer.asciidoc[] diff --git a/export-pkgbuild-keys.in b/export-pkgbuild-keys.in new file mode 100644 index 0000000..f392f4c --- /dev/null +++ b/export-pkgbuild-keys.in @@ -0,0 +1,68 @@ +#!/bin/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +m4_include(lib/common.sh) + +usage() { + cat <<- _EOF_ + Usage: ${BASH_SOURCE[0]##*/} + + Export the PGP keys from a PKGBUILDs validpgpkeys array into the keys/pgp/ + subdirectory. Useful for distributing packager validated source signing + keys alongside PKGBUILDs. + + OPTIONS + -h, --help Show this help text +_EOF_ +} + +# option checking +while (( $# )); do + case $1 in + -h|--help) + usage + exit 0 + ;; + *) + die "invalid argument: %s" "$1" + ;; + esac +done + +if [[ ! -f PKGBUILD ]]; then + die "This must be run a directory containing a PKGBUILD." +fi + +mapfile -t validpgpkeys < <( + # shellcheck source=PKGBUILD.proto + . ./PKGBUILD + printf "%s\n" "${validpgpkeys[@]}" +) + +if (( ${#validpgpkeys[@]} == 0 )); then + exit 0 +fi + +mkdir -p keys/pgp +error=0 + +for key in "${validpgpkeys[@]}"; do + gpg --output "keys/pgp/$key.asc.tmp" --armor --export --export-options export-minimal "$key" 2>/dev/null + + # gpg does not give a non-zero return value if it fails to export... + if [[ -f keys/pgp/$key.asc.tmp ]]; then + mv "keys/pgp/$key.asc.tmp" "keys/pgp/$key.asc" + else + if [[ -f keys/pgp/$key.asc ]]; then + warning "Failed to update key: $key" + else + error "Key unavailable: $key" + error=1 + fi + fi +done + +if (( error )); then + die "Failed to export all \'validpgpkeys\' entries." +fi -- cgit v1.2.3-54-g00ecf From 8d4c46d3689c5b859587c54f2741555f75479db4 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Thu, 9 Jun 2022 20:44:47 +0200 Subject: export-pkgbuild-keys: add simple success export messages Signed-off-by: Levente Polyak --- export-pkgbuild-keys.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/export-pkgbuild-keys.in b/export-pkgbuild-keys.in index f392f4c..b5b1240 100644 --- a/export-pkgbuild-keys.in +++ b/export-pkgbuild-keys.in @@ -40,6 +40,7 @@ mapfile -t validpgpkeys < <( printf "%s\n" "${validpgpkeys[@]}" ) +msg "Exporting ${#validpgpkeys[@]} PGP keys..." if (( ${#validpgpkeys[@]} == 0 )); then exit 0 fi @@ -52,6 +53,7 @@ for key in "${validpgpkeys[@]}"; do # gpg does not give a non-zero return value if it fails to export... if [[ -f keys/pgp/$key.asc.tmp ]]; then + msg2 "Exported $key" mv "keys/pgp/$key.asc.tmp" "keys/pgp/$key.asc" else if [[ -f keys/pgp/$key.asc ]]; then -- cgit v1.2.3-54-g00ecf From 01b6196883d0e44b9f8f17c7f4f28df27ab5ac14 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Thu, 9 Jun 2022 21:02:56 +0200 Subject: export-pkgbuild-keys: use TEMPDIR while exporting key This avoids the possibility to pollute the keys directory with temporary files if the script is aborted in between. Signed-off-by: Levente Polyak --- export-pkgbuild-keys.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/export-pkgbuild-keys.in b/export-pkgbuild-keys.in index b5b1240..c10e4d1 100644 --- a/export-pkgbuild-keys.in +++ b/export-pkgbuild-keys.in @@ -45,16 +45,19 @@ if (( ${#validpgpkeys[@]} == 0 )); then exit 0 fi +trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT +TEMPDIR=$(mktemp -d --tmpdir export-pkgbuild-keys.XXXXXXXXXX) + mkdir -p keys/pgp error=0 for key in "${validpgpkeys[@]}"; do - gpg --output "keys/pgp/$key.asc.tmp" --armor --export --export-options export-minimal "$key" 2>/dev/null + gpg --output "$TEMPDIR/$key.asc" --armor --export --export-options export-minimal "$key" 2>/dev/null # gpg does not give a non-zero return value if it fails to export... - if [[ -f keys/pgp/$key.asc.tmp ]]; then + if [[ -f $TEMPDIR/$key.asc ]]; then msg2 "Exported $key" - mv "keys/pgp/$key.asc.tmp" "keys/pgp/$key.asc" + mv "$TEMPDIR/$key.asc" "keys/pgp/$key.asc" else if [[ -f keys/pgp/$key.asc ]]; then warning "Failed to update key: $key" -- cgit v1.2.3-54-g00ecf From 7a8f10149823feaa6d890a1e2ac8e2089f2aad00 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Thu, 9 Jun 2022 21:25:10 +0200 Subject: doc/export-pkgbuild-keys.1: fix filename to detect manpage location The manpage doc has been added without a suffix which fails during install. --- doc/export-pkgbuild-keys.1.asciidoc | 25 +++++++++++++++++++++++++ doc/export-pkgbuild-keys.asciidoc | 25 ------------------------- 2 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 doc/export-pkgbuild-keys.1.asciidoc delete mode 100644 doc/export-pkgbuild-keys.asciidoc diff --git a/doc/export-pkgbuild-keys.1.asciidoc b/doc/export-pkgbuild-keys.1.asciidoc new file mode 100644 index 0000000..9c47515 --- /dev/null +++ b/doc/export-pkgbuild-keys.1.asciidoc @@ -0,0 +1,25 @@ +export-pkgbuild-keys(1) +======================= + +Name +---- +export-pkgbuild-keys - Export valid source signing keys from a PKGBUILD + +Synopsis +-------- +export-pkgbuild-keys + +Description +----------- + +Export the PGP keys from a PKGBUILDs validpgpkeys array into the keys/pgp/ +subdirectory. Useful for distributing packager validated source signing +keys alongside PKGBUILDs. + +Options +------- + +*-h, --help*:: + Show a help text. + +include::footer.asciidoc[] diff --git a/doc/export-pkgbuild-keys.asciidoc b/doc/export-pkgbuild-keys.asciidoc deleted file mode 100644 index 9c47515..0000000 --- a/doc/export-pkgbuild-keys.asciidoc +++ /dev/null @@ -1,25 +0,0 @@ -export-pkgbuild-keys(1) -======================= - -Name ----- -export-pkgbuild-keys - Export valid source signing keys from a PKGBUILD - -Synopsis --------- -export-pkgbuild-keys - -Description ------------ - -Export the PGP keys from a PKGBUILDs validpgpkeys array into the keys/pgp/ -subdirectory. Useful for distributing packager validated source signing -keys alongside PKGBUILDs. - -Options -------- - -*-h, --help*:: - Show a help text. - -include::footer.asciidoc[] -- cgit v1.2.3-54-g00ecf From 383cfa7e60feca2cf5d169a766fc67374ec210e9 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Thu, 9 Jun 2022 21:29:10 +0200 Subject: Version 20220609 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 40abda9..04b205f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -V=20220207 +V=20220609 BUILDTOOLVER ?= $(V) PREFIX = /usr/local -- cgit v1.2.3-54-g00ecf From cde012d25e7b9cb8b459af151c7210f2eddf4763 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Sat, 29 Jan 2022 10:30:35 +1000 Subject: Add x86_64_v3 builders Signed-off-by: Allan McRae --- Makefile | 8 +++ makepkg-x86_64_v3.conf | 162 ++++++++++++++++++++++++++++++++++++++++++ pacman-extra-x86_64_v3.conf | 92 ++++++++++++++++++++++++ pacman-staging-x86_64_v3.conf | 98 +++++++++++++++++++++++++ pacman-testing-x86_64_v3.conf | 92 ++++++++++++++++++++++++ setarch-aliases.d/x86_64_v3 | 1 + 6 files changed, 453 insertions(+) create mode 100644 makepkg-x86_64_v3.conf create mode 100644 pacman-extra-x86_64_v3.conf create mode 100644 pacman-staging-x86_64_v3.conf create mode 100644 pacman-testing-x86_64_v3.conf create mode 100644 setarch-aliases.d/x86_64_v3 diff --git a/Makefile b/Makefile index 04b205f..889b1ec 100644 --- a/Makefile +++ b/Makefile @@ -29,9 +29,13 @@ BINPROGS = \ CONFIGFILES = \ makepkg-x86_64.conf \ + makepkg-x86_64_v3.conf \ pacman-extra.conf \ + pacman-extra-x86_64_v3.conf \ pacman-testing.conf \ + pacman-testing-x86_64_v3.conf \ pacman-staging.conf \ + pacman-staging-x86_64_v3.conf \ pacman-multilib.conf \ pacman-multilib-testing.conf \ pacman-multilib-staging.conf \ @@ -39,6 +43,7 @@ CONFIGFILES = \ pacman-gnome-unstable.conf SETARCH_ALIASES = \ + x86_64_v3 COMMITPKG_LINKS = \ extrapkg \ @@ -55,8 +60,11 @@ COMMITPKG_LINKS = \ ARCHBUILD_LINKS = \ extra-x86_64-build \ + extra-x86_64_v3-build \ testing-x86_64-build \ + testing-x86_64_v3-build \ staging-x86_64-build \ + staging-x86_64_v3-build \ multilib-build \ multilib-testing-build \ multilib-staging-build \ diff --git a/makepkg-x86_64_v3.conf b/makepkg-x86_64_v3.conf new file mode 100644 index 0000000..5d1ba2c --- /dev/null +++ b/makepkg-x86_64_v3.conf @@ -0,0 +1,162 @@ +#!/hint/bash +# shellcheck disable=2034 + +# +# /etc/makepkg.conf +# + +######################################################################### +# SOURCE ACQUISITION +######################################################################### +# +#-- The download utilities that makepkg should use to acquire sources +# Format: 'protocol::agent' +DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u' + 'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u' + 'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' + 'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' + 'rsync::/usr/bin/rsync --no-motd -z %u %o' + 'scp::/usr/bin/scp -C %u %o') + +# Other common tools: +# /usr/bin/snarf +# /usr/bin/lftpget -c +# /usr/bin/wget + +#-- The package required by makepkg to download VCS sources +# Format: 'protocol::package' +VCSCLIENTS=('bzr::bzr' + 'fossil::fossil' + 'git::git' + 'hg::mercurial' + 'svn::subversion') + +######################################################################### +# ARCHITECTURE, COMPILE FLAGS +######################################################################### +# +CARCH="x86_64_v3" +CHOST="x86_64-pc-linux-gnu" + +#-- Compiler and Linker Flags +#CPPFLAGS="" +CFLAGS="-march=x86-64-v3 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection" +CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" +LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" +LTOFLAGS="-flto=auto" +#RUSTFLAGS="-C opt-level=2" +#-- Make Flags: change this for DistCC/SMP systems +#MAKEFLAGS="-j2" +#-- Debugging flags +DEBUG_CFLAGS="-g" +DEBUG_CXXFLAGS="$DEBUG_CFLAGS" +#DEBUG_RUSTFLAGS="-C debuginfo=2" + +######################################################################### +# BUILD ENVIRONMENT +######################################################################### +# +# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign) +# A negated environment option will do the opposite of the comments below. +# +#-- distcc: Use the Distributed C/C++/ObjC compiler +#-- color: Colorize output messages +#-- ccache: Use ccache to cache compilation +#-- check: Run the check() function if present in the PKGBUILD +#-- sign: Generate PGP signature file +# +BUILDENV=(!distcc color !ccache check !sign) +# +#-- If using DistCC, your MAKEFLAGS will also need modification. In addition, +#-- specify a space-delimited list of hosts running in the DistCC cluster. +#DISTCC_HOSTS="" +# +#-- Specify a directory for package building. +#BUILDDIR=/tmp/makepkg + +######################################################################### +# GLOBAL PACKAGE OPTIONS +# These are default values for the options=() settings +######################################################################### +# +# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto) +# A negated option will do the opposite of the comments below. +# +#-- strip: Strip symbols from binaries/libraries +#-- docs: Save doc directories specified by DOC_DIRS +#-- libtool: Leave libtool (.la) files in packages +#-- staticlibs: Leave static library (.a) files in packages +#-- emptydirs: Leave empty directories in packages +#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip +#-- purge: Remove files specified by PURGE_TARGETS +#-- debug: Add debugging flags as specified in DEBUG_* variables +#-- lto: Add compile flags for building with link time optimization +# +OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto) + +#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2 +INTEGRITY_CHECK=(sha256) +#-- Options to be used when stripping binaries. See `man strip' for details. +STRIP_BINARIES="--strip-all" +#-- Options to be used when stripping shared libraries. See `man strip' for details. +STRIP_SHARED="--strip-unneeded" +#-- Options to be used when stripping static libraries. See `man strip' for details. +STRIP_STATIC="--strip-debug" +#-- Manual (man and info) directories to compress (if zipman is specified) +MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info}) +#-- Doc directories to remove (if !docs is specified) +DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) +#-- Files to be removed from all packages (if purge is specified) +PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) +#-- Directory to store source code in for debug packages +DBGSRCDIR="/usr/src/debug" + +######################################################################### +# PACKAGE OUTPUT +######################################################################### +# +# Default: put built package and cached source in build directory +# +#-- Destination: specify a fixed directory where all packages will be placed +#PKGDEST=/home/packages +#-- Source cache: specify a fixed directory where source files will be cached +#SRCDEST=/home/sources +#-- Source packages: specify a fixed directory where all src packages will be placed +#SRCPKGDEST=/home/srcpackages +#-- Log files: specify a fixed directory where all log files will be placed +#LOGDEST=/home/makepkglogs +#-- Packager: name/email of the person or organization building packages +#PACKAGER="John Doe " +#-- Specify a key to use for package signing +#GPGKEY="" + +######################################################################### +# COMPRESSION DEFAULTS +######################################################################### +# +COMPRESSGZ=(gzip -c -f -n) +COMPRESSBZ2=(bzip2 -c -f) +COMPRESSXZ=(xz -c -z -) +COMPRESSZST=(zstd -c -T0 --ultra -20 -) +COMPRESSLRZ=(lrzip -q) +COMPRESSLZO=(lzop -q) +COMPRESSZ=(compress -c -f) +COMPRESSLZ4=(lz4 -q) +COMPRESSLZ=(lzip -c -f) + +######################################################################### +# EXTENSION DEFAULTS +######################################################################### +# +PKGEXT='.pkg.tar.zst' +SRCEXT='.src.tar.gz' + +######################################################################### +# OTHER +######################################################################### +# +#-- Command used to run pacman as root, instead of trying sudo and su +#PACMAN_AUTH=() +# vim: set ft=sh ts=2 sw=2 et: diff --git a/pacman-extra-x86_64_v3.conf b/pacman-extra-x86_64_v3.conf new file mode 100644 index 0000000..afb7a0c --- /dev/null +++ b/pacman-extra-x86_64_v3.conf @@ -0,0 +1,92 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = x86_64_v3 x86_64 + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +NoProgressBar +# We cannot check disk space from within a chroot environment +#CheckSpace +VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/pacman-staging-x86_64_v3.conf b/pacman-staging-x86_64_v3.conf new file mode 100644 index 0000000..46ba8f8 --- /dev/null +++ b/pacman-staging-x86_64_v3.conf @@ -0,0 +1,98 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = x86_64_v3 x86_64 + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +NoProgressBar +# We cannot check disk space from within a chroot environment +#CheckSpace +VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +[staging] +Include = /etc/pacman.d/mirrorlist + +[testing] +Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[community-staging] +Include = /etc/pacman.d/mirrorlist + +[community-testing] +Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/pacman-testing-x86_64_v3.conf b/pacman-testing-x86_64_v3.conf new file mode 100644 index 0000000..2eb463d --- /dev/null +++ b/pacman-testing-x86_64_v3.conf @@ -0,0 +1,92 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = x86_64_v3 x86_64 + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +NoProgressBar +# We cannot check disk space from within a chroot environment +#CheckSpace +VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +[testing] +Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[community-testing] +Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/setarch-aliases.d/x86_64_v3 b/setarch-aliases.d/x86_64_v3 new file mode 100644 index 0000000..1c09346 --- /dev/null +++ b/setarch-aliases.d/x86_64_v3 @@ -0,0 +1 @@ +x86_64 -- cgit v1.2.3-54-g00ecf From ac222ae00469555269722483a1d936997b220f4b Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Fri, 10 Jun 2022 00:57:45 +0200 Subject: archrelease: support subdirectories in package directories We need to support subdirectories for the `keys` directory used to distribute PGP keys alongside the packaging sources. This is achieved by using `svn ls` to list the files and directories in the packaging root and leverage the behavior of `svn copy` to consider subdirectories inside the root but only copy over files and directories under the subdirectory that are already tracked by svn. As a step in between, we now use `svn ls --recursive` to list all tracked svn files in the current repos directory and remove all tracked files in the staging area. Hence the `svn copy` in combination with the `svn rm` will result in a sync behavior from the packaging root to the repos directory. Signed-off-by: Levente Polyak --- archrelease.in | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/archrelease.in b/archrelease.in index 252db28..3490ee2 100644 --- a/archrelease.in +++ b/archrelease.in @@ -51,11 +51,6 @@ fi pushd .. >/dev/null mapfile -t known_files < <(svn ls -r HEAD "$trunk") wait $! || die "failed to discover committed files" -for file in "${known_files[@]}"; do - if [[ ${file:(-1)} = '/' ]]; then - die "archrelease: subdirectories are not supported in package directories!" - fi -done # gracefully handle files containing an "@" character known_files=("${known_files[@]/%/@}") @@ -67,7 +62,7 @@ for tag in "$@"; do stat_busy "Copying %s to %s" "${trunk}" "${tag}" if [[ -d repos/$tag ]]; then - mapfile -t trash < <(svn ls "repos/$tag") + mapfile -t trash < <(svn ls --recursive "repos/$tag") wait $! || die "failed to discover existing files" if (( ${#trash[@]} )); then trash=("${trash[@]/#/repos/$tag/}") -- cgit v1.2.3-54-g00ecf From 49d889cb8db18124a3d05b1012605b50a6cefca8 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Mon, 20 Jun 2022 22:54:34 +0200 Subject: Version 20220620 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 889b1ec..ecd54a2 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -V=20220609 +V=20220620 BUILDTOOLVER ?= $(V) PREFIX = /usr/local -- cgit v1.2.3-54-g00ecf From f386c131426927cca3f771408dbc70a05602a44d Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Wed, 22 Jun 2022 00:51:22 +0200 Subject: export-pkgbuild-keys: fix export for packages without validpgpkeys In case the validpgpkeys array is empty or undefined, the empty printf line only included a single line break which lead to mapfile -t consuming it as an array with 1 element consisting of an empty string. Fix this by only calling the printf in case the validpgpkeys array is not empty. Without any output, the mapfile -t will simply produce an empty array. Signed-off-by: Levente Polyak --- export-pkgbuild-keys.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/export-pkgbuild-keys.in b/export-pkgbuild-keys.in index c10e4d1..8697b3d 100644 --- a/export-pkgbuild-keys.in +++ b/export-pkgbuild-keys.in @@ -37,7 +37,9 @@ fi mapfile -t validpgpkeys < <( # shellcheck source=PKGBUILD.proto . ./PKGBUILD - printf "%s\n" "${validpgpkeys[@]}" + if (( ${#validpgpkeys[@]} )); then + printf "%s\n" "${validpgpkeys[@]}" + fi ) msg "Exporting ${#validpgpkeys[@]} PGP keys..." -- cgit v1.2.3-54-g00ecf From b8d9a2b4fd02918a9988aafdf073e45a957b32e7 Mon Sep 17 00:00:00 2001 From: Levente Polyak Date: Wed, 22 Jun 2022 00:58:19 +0200 Subject: Version 20220621 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ecd54a2..d888cc1 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -V=20220620 +V=20220621 BUILDTOOLVER ?= $(V) PREFIX = /usr/local -- cgit v1.2.3-54-g00ecf