Compare commits

...

19 Commits

Author SHA1 Message Date
2595cd2a3a artixpkg: exclude .artixlinux on import rsync 2023-07-22 23:51:20 +02:00
1917c252aa Merge pull request 'artixpkg: remove migration' (#86) from rm-migration into master
Reviewed-on: #86
2023-07-22 16:37:25 +02:00
4c458bf242 artixpkg: remove migration 2023-07-22 11:17:20 +02:00
5b00c80698 artixpkg: remove import patch msgs 2023-07-21 20:56:04 +02:00
98c3c8c5b0 release (#84)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: #84
2023-07-21 15:13:09 +02:00
0786c46474 buildiso: fix bootfs initcpio 2023-07-20 22:06:36 +02:00
d22406b308 mount.sh: unquote default tmpfs_opts 2023-07-20 17:42:18 +02:00
87ea01db9b arch-patches (#83)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: #83
2023-07-20 17:33:21 +02:00
cb347b511a rename deploypkg to repopkg 2023-07-20 11:58:10 +02:00
e15d70f732 artixpkg: remove unused source lib 2023-07-19 23:12:22 +02:00
5ad0d72378 Merge branch 'validation' 2023-07-19 23:02:28 +02:00
f8dccbf59e artixpkg: move msgs in api funcs 2023-07-19 18:17:21 +02:00
a3bcbd40d2 artixpkg: update help 2023-07-19 17:35:31 +02:00
7a6c7e61de artixpkg: add dedicated push cmd for grouped pushes 2023-07-19 17:28:08 +02:00
b517c7dcf8 artixpkg: update help 2023-07-19 17:22:12 +02:00
b5c3decf9b query (#81)
Reviewed-on: #81
2023-07-19 13:27:50 +02:00
de2d4bb4de artixpkg: rename --universe opt --all 2023-07-05 17:51:58 +02:00
f2eb80f1ab artixpkg: add check_pkgbuild_validity() 2023-07-05 17:48:36 +02:00
5f2ac0a406 artixpkg: fix ci create 2023-06-26 21:09:13 +02:00
35 changed files with 1011 additions and 314 deletions

View File

@@ -3,7 +3,7 @@ SHELL=/bin/bash
V=0.31
BUILDTOOLVER ?= $(V)
CHROOTVER=0.11
CHROOTVER=0.12
TOOLS = artools
SYSCONFDIR = /etc
@@ -37,22 +37,26 @@ TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*)
TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*)
LN_BUILDPKG = \
buildpkg-system \
buildpkg-system-gremlins \
buildpkg-system-goblins \
buildpkg-world \
buildpkg-world-gremlins \
buildpkg-world-goblins \
buildpkg-lib32 \
buildpkg-lib32-gremlins \
buildpkg-lib32-goblins \
buildpkg-galaxy \
buildpkg-galaxy-gremlins \
buildpkg-galaxy-goblins
buildpkg-system-x86_64 \
buildpkg-system-gremlins-x86_64 \
buildpkg-system-goblins-x86_64 \
buildpkg-world-x86_64 \
buildpkg-world-gremlins-x86_64 \
buildpkg-world-goblins-x86_64 \
buildpkg-lib32-x86_64 \
buildpkg-lib32-gremlins-x86_64 \
buildpkg-lib32-goblins-x86_64 \
buildpkg-galaxy-x86_64 \
buildpkg-galaxy-gremlins-x86_64 \
buildpkg-galaxy-goblins-x86_64
LN_BUILDISO = \
buildiso-gremlins \
buildiso-goblins
buildiso-world \
buildiso-world-gremlins \
buildiso-world-goblins \
buildiso-galaxy \
buildiso-galaxy-gremlins \
buildiso-galaxy-goblins
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso
binprogs_base: $(BINPROGS_BASE)
@@ -133,6 +137,9 @@ install_pkg: binprogs_pkg
for l in $(LN_BUILDPKG); do ln -sf buildpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
# compat symlink
ln -sf repopkg $(DESTDIR)$(PREFIX)/bin/deploypkg
install_iso: binprogs_iso
install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install -dm0755 $(DESTDIR)$(PREFIX)/bin

View File

@@ -88,15 +88,6 @@ Include = /etc/pacman.d/mirrorlist
[world]
Include = /etc/pacman.d/mirrorlist
[galaxy-goblins]
Include = /etc/pacman.d/mirrorlist
[galaxy-gremlins]
Include = /etc/pacman.d/mirrorlist
[galaxy]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.

View File

@@ -82,12 +82,6 @@ Include = /etc/pacman.d/mirrorlist
[world]
Include = /etc/pacman.d/mirrorlist
[galaxy-gremlins]
Include = /etc/pacman.d/mirrorlist
[galaxy]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.

View File

@@ -82,12 +82,6 @@ Include = /etc/pacman.d/mirrorlist
[world]
Include = /etc/pacman.d/mirrorlist
#[galaxy-gremlins]
#Include = /etc/pacman.d/mirrorlist
[galaxy]
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.

View File

@@ -0,0 +1,95 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
[system-goblins]
Include = /etc/pacman.d/mirrorlist
[system-gremlins]
Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
[world-goblins]
Include = /etc/pacman.d/mirrorlist
[world-gremlins]
Include = /etc/pacman.d/mirrorlist
[world]
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

View File

@@ -0,0 +1,89 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
[system-gremlins]
Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
[world-gremlins]
Include = /etc/pacman.d/mirrorlist
[world]
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

89
config/pacman/system.conf Normal file
View File

@@ -0,0 +1,89 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
#[system-gremlins]
#Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
#[world-gremlins]
#Include = /etc/pacman.d/mirrorlist
[world]
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

View File

@@ -0,0 +1,95 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
[system-goblins]
Include = /etc/pacman.d/mirrorlist
[system-gremlins]
Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
[world-goblins]
Include = /etc/pacman.d/mirrorlist
[world-gremlins]
Include = /etc/pacman.d/mirrorlist
[world]
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

View File

@@ -0,0 +1,89 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
[system-gremlins]
Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
[world-gremlins]
Include = /etc/pacman.d/mirrorlist
[world]
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

89
config/pacman/world.conf Normal file
View File

@@ -0,0 +1,89 @@
#
# /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 = auto
# 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 Artix Linux
# packagers with `pacman-key --populate artix`.
#
# 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 gremlins 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.
#[system-gremlins]
#Include = /etc/pacman.d/mirrorlist
[system]
Include = /etc/pacman.d/mirrorlist
#[world-gremlins]
#Include = /etc/pacman.d/mirrorlist
[world]
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

View File

@@ -3,6 +3,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
LIBDIR=${LIBDIR:-'@libdir@'}
DATADIR=${DATADIR:-'@datadir@'}
# shellcheck source=src/lib/base/message.sh
source "${LIBDIR}"/base/message.sh
@@ -36,8 +37,8 @@ kill_chroot_process(){
umask 0022
working_dir=''
files=()
files=()
mount_args=("-B:/etc/hosts:/etc/hosts")
usage() {
@@ -50,15 +51,18 @@ usage() {
printf ' -c <dir> Set pacman cache\n'
printf ' -f <file> Copy file from the host to the chroot\n'
printf ' -s Do not run setarch\n'
printf ' -b <list> Bind mountargs\n'
printf ' List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]\n'
printf ' -t <opts> tmpfs mount opts\n'
printf ' -b <args> Bind mountargs\n'
printf ' Format:\n'
printf ' "arg1:src1:dest1 arg2:src2:dest2"\n'
printf ' -h This message\n'
exit 1
}
# save all args for check_root
orig_args=("$@")
opts='hC:M:c:b:f:s'
opts='hC:M:c:b:f:t:s'
while getopts ${opts} arg; do
case "${arg}" in
@@ -67,14 +71,15 @@ while getopts ${opts} arg; do
c) cache_dirs+=("$OPTARG") ;;
f) files+=("$OPTARG") ;;
s) nosetarch=1 ;;
t) tmpfs_opts="$OPTARG" ;;
b) bindmounts="$OPTARG"; mount_args+=(${bindmounts}) ;;
h|?) usage ;;
*) error "invalid argument '%s'" "$arg"; usage ;;
esac
done
shift $(( OPTIND - 1 ))
shift $((OPTIND - 1))
(( $# < 1 )) && die 'You must specify a directory.'
check_root "" "${BASH_SOURCE[0]}" "${orig_args[@]}"
working_dir=$(readlink -f "$1")
@@ -83,7 +88,7 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.'
if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
mapfile -t cache_dirs < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" CacheDir)
fi
# shellcheck disable=2016
@@ -91,15 +96,15 @@ mapfile -t host_mirrors < <(pacman-conf --repo world Server 2> /dev/null | sed -
for host_mirror in "${host_mirrors[@]}"; do
if [[ $host_mirror == *file://* ]]; then
# shellcheck disable=2016
host_mirror=$(printf "%s\n" "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror")
host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
for m in "$host_mirror"/pool/*/; do
in_array "$m" "${cache_dirs[@]}" || cache_dirs+=("$m")
done
fi
done
while read -r line; do
# shellcheck disable=2016
mapfile -t lines < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
mapfile -t lines < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" \
--repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#')
for line in "${lines[@]}"; do
if [[ $line = file://* ]]; then
@@ -107,7 +112,15 @@ while read -r line; do
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
fi
done
done < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
done < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" --repo-list)
mount_args+=("-B:${cache_dirs[0]//:/\\:}:${cache_dirs[0]//:/\\:}")
for cache_dir in "${cache_dirs[@]:1}"; do
mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}")
done
# {{{ functions
copy_hostconf () {
unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
@@ -115,9 +128,9 @@ copy_hostconf () {
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
[[ -n $pacman_conf ]] && cp "$pacman_conf" "${working_dir}/etc/pacman.conf"
[[ -n $pacman_conf ]] && cp "$pacman_conf" "$working_dir/etc/pacman.conf"
[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "${working_dir}/etc/makepkg.conf"
[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
local file
for file in "${files[@]}"; do
@@ -125,15 +138,9 @@ copy_hostconf () {
cp -T "$file" "$working_dir$file"
done
sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "${working_dir}/etc/pacman.conf"
sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "$working_dir/etc/pacman.conf"
}
mount_args+=("-B:${cache_dirs[0]//:/\\:}:${cache_dirs[0]//:/\\:}")
for cache_dir in "${cache_dirs[@]:1}"; do
mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}")
done
chroot_extra_mount() {
chroot_add_resolv_conf "${working_dir}"
@@ -147,27 +154,28 @@ chroot_extra_mount() {
done
}
# }}}
umask 0022
# Sanity check
if [[ ! -f "$working_dir/.artools" ]]; then
die "'%s' does not appear to be an artix chroot." "$working_dir"
elif [[ $(cat "$working_dir/.artools") != "${CHROOTVERSION}" ]]; then
if [[ ! -f "$working_dir/.artix-chroot" ]]; then
die "'%s' does not appear to be an Artix chroot." "$working_dir"
elif [[ $(cat "$working_dir/.artix-chroot") != "${CHROOTVERSION}" ]]; then
die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
fi
chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
chroot_api_mount "${working_dir}" "${tmpfs_opts}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
chroot_extra_mount
copy_hostconf
eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
eval "$(grep -a '^CARCH=' "$working_dir/etc/makepkg.conf")"
[[ -z $nosetarch ]] || unset CARCH
if [[ -f "/usr/share/artools/artools/setarch-aliases.d/${CARCH}" ]]; then
read -r set_arch < "/usr/share/artools/artools/setarch-aliases.d/${CARCH}"
if [[ -f "${DATADIR}/setarch-aliases.d/${CARCH}" ]]; then
read -r set_arch < "${DATADIR}/setarch-aliases.d/${CARCH}"
else
set_arch="${CARCH}"
fi

View File

@@ -97,7 +97,7 @@ unshare --mount basestrap -${umode}Mc ${pacman_conf:+-C "$pacman_conf"} "$workin
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
printf 'LANG=C.UTF-8\n' > "$working_dir/etc/locale.conf"
# printf 'KEYMAP=en\n' > "$working_dir/etc/vconsole.conf"
printf "%s\n" "${CHROOTVERSION}" > "$working_dir/.artools"
printf "%s\n" "${CHROOTVERSION}" > "$working_dir/.artix-chroot"
dbus-uuidgen --ensure="$working_dir"/etc/machine-id

View File

@@ -184,7 +184,7 @@ gen_iso_fn(){
vars+=("${profile}")
vars+=("${INITSYS}")
case "${repo}" in
'gremlins'|'goblins') vars+=("${repo}") ;;
*-gremlins|*-goblins) vars+=("${repo#*-}") ;;
esac
vars+=("${ISO_VERSION}")
vars+=("${arch}")
@@ -197,10 +197,6 @@ gen_iso_fn(){
prepare_build(){
load_profile
case "${repo}" in
buildiso) repo=default ;;
esac
pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf"
[[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf"
@@ -328,7 +324,7 @@ boot_only=false
basestrap_args=(-GMc)
cmd=${0##*/}
repo=${cmd##*-}
repo=${cmd#buildiso-}
owner=${SUDO_USER:-$USER}
profile='base'
chroots_iso="${CHROOTS_DIR}/buildiso"

View File

@@ -56,6 +56,7 @@ chroot_mount_conditional() {
chroot_setup(){
local mnt="$1"
local tmpfs_opts="${2:-mode=1777,strictatime,nodev,nosuid}"
chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind &&
chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev &&
chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
@@ -65,13 +66,13 @@ chroot_setup(){
chroot_mount devpts "$mnt/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec &&
chroot_mount shm "$mnt/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev &&
chroot_mount /run "$mnt/run" -t tmpfs -o nosuid,nodev,mode=0755 &&
chroot_mount tmp "$mnt/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
chroot_mount tmp "$mnt/tmp" -t tmpfs -o "${tmpfs_opts}"
}
chroot_api_mount() {
CHROOT_ACTIVE_MOUNTS=()
trap_setup chroot_api_umount
chroot_setup "$1"
chroot_setup "$1" "$2"
}
chroot_api_umount() {

View File

@@ -34,7 +34,7 @@ prepare_initramfs_mkinitcpio() {
[[ "${profile}" == 'base' ]] && mkinitcpio_conf=mkinitcpio-pxe.conf
k=$(<"$mnt"/usr/src/linux/version)
read_from_list "${common_dir}/Packages-boot"
packages+=($(read_from_list "${common_dir}/Packages-boot"))
basestrap "${basestrap_args[@]}" "$mnt" "${packages[@]}"
if [[ -n "${GPG_KEY}" ]]; then

View File

@@ -13,13 +13,16 @@ artixpkg_admin_usage() {
Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS
transfer Clone a package repository
transfer Transfer obsolete repository to landfill
query Query maintainers and topics
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} transfer libfoo libbar
$ ${COMMAND} query --maintainer tux
$ ${COMMAND} query --topic kf5
_EOF_
}
@@ -44,6 +47,14 @@ artixpkg_admin() {
artixpkg_admin_transfer "$@"
exit 0
;;
query)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/query.sh
source "${LIBDIR}"/pkg/admin/query.sh
artixpkg_admin_query "$@"
exit 0
;;
-*)
die "invalid argument: %s" "$1"
;;

View File

@@ -0,0 +1,89 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_QUERY_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_QUERY_SH=1
set -e
artixpkg_admin_query_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer=NAME Query for packages of the named maintainer
-t, --topic=NAME Query for packages of the named topic
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} --maintainer maintainer-mynickname
$ ${COMMAND} --topic myopic
_EOF_
}
artixpkg_admin_query() {
if (( $# < 1 )); then
artixpkg_admin_query_usage
exit 0
fi
# options
local MAINTAINER=
local TOPIC=
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_query_usage
exit 0
;;
-m|--maintainer)
(( $# <= 1 )) && die "missing argument for %s" "$1"
MAINTAINER="$2"
shift 2
;;
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
--topic=*)
TOPIC="${1#*=}"
shift
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
# Query packages of a maintainer
if [[ -n ${MAINTAINER} ]]; then
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -r '.data | .[].name' | sort)
printf "%s\n" "${pkgbases[@]}"
fi
if [[ -n ${TOPIC} ]]; then
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
printf "%s\n" "${pkgbases[@]}"
fi
}

View File

@@ -94,17 +94,10 @@ list_all_repos() {
local url
url="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000"
stat_busy "Query all packages"
api_get "$url" \
-H "accept: application/json"
}
list_topics() {
local url
local pkgbase="$1"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics"
api_get "$url" \
-H "accept: application/json"
stat_done
}
add_topic() {

View File

@@ -1,102 +0,0 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
declare -rA REPO_MAP=(
[core-rebuild]=system-goblins
[core-staging]=system-goblins
[core-testing]=system-gremlins
[core]=system
[extra-rebuild]=world-goblins
[extra-staging]=world-goblins
[extra-testing]=world-gremlins
[extra]=world
[multilib-staging]=lib32-goblins
[multilib-testing]=lib32-gremlins
[multilib]=lib32
[community-staging]=galaxy-goblins
[community-testing]=galaxy-gremlins
[community]=galaxy
)
update_gitignore() {
{
printf '*.service\n'
printf '*.timer\n'
printf '*.socket\n'
} >> .gitignore
}
migrate_to_yaml() {
if [[ -f trunk/PKGBUILD ]]; then
stat_busy "Migrating ${pkgbase} to new layout"
create_repo_db
stat_done
# shellcheck source=contrib/makepkg/PKGBUILD.proto
source "trunk/PKGBUILD"
update_yaml_base
if [[ -d x86_64 ]]; then
local repos
mapfile -t repos < <(ls x86_64)
for r in "${repos[@]}"; do
# shellcheck source=contrib/makepkg/PKGBUILD.proto
source "x86_64/${r}/PKGBUILD"
local repo
local pkgs
local version
local pkgfiles
mapfile -t pkgfiles < <(print_package_names)
pkgs=$(yaml_array "${pkgfiles[@]}")
version=$(get_full_version)
repo=".repos.${REPO_MAP[$r]}"
version="${version}" pkgs="${pkgs}" repo="${repo}" \
yq -P 'with(
eval(strenv(repo));
.version = env(version) |
.packages = env(pkgs) )' \
-i "${REPO_DB}"
if [[ -n ${GIT_TOKEN} ]]; then
local topic gitname
gitname=$(get_compliant_name "${pkgbase}")
topic="${REPO_MAP[$r]}"
if ! add_topic "${gitname}" "${topic}"; then
warning "failed to add topic: ${topic}"
fi
topic="${r}"
if ! remove_topic "${gitname}" "${topic}"; then
warning "failed to remove topic: ${topic}"
fi
fi
done
git rm -r x86_64
fi
cp -r trunk/* ./
git rm -r trunk
if [[ -f .artixlinux/agent.yaml ]]; then
git rm .artixlinux/agent.yaml
fi
if [[ -f .gitignore ]]; then
update_gitignore
fi
if [[ -f Jenkinsfile ]]; then
git mv Jenkinsfile "${REPO_CI}"
fi
git add .
git commit -m "migrate to new layout"
fi
}

View File

@@ -31,13 +31,4 @@ find_cached_pkgfile() {
shopt -u extglob
get_pkgbasename() {
local name="$1"
local rm_pkg=${name%.pkg.tar*}
rm_pkg=${rm_pkg%-*}
rm_pkg=${rm_pkg%-*}
rm_pkg=${rm_pkg%-*}
printf "%s\n" "$rm_pkg"
}
#}}}

View File

@@ -16,16 +16,18 @@ artixpkg_git_usage() {
clone Clone a package repository
config Configure a clone according to artix specs
create Create a new Gitea package repository
pull Pull a package repository
push Push a package repository
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} clone libfoo linux libbar
$ ${COMMAND} clone --maintainer maintainer-mynickname
$ ${COMMAND} config -t libfoo
$ ${COMMAND} config -u libfoo
$ ${COMMAND} create libfoo
$ ${COMMAND} clone --maintainer tux
$ ${COMMAND} config --topic mytopic
$ ${COMMAND} config --maintainer tux
$ ${COMMAND} create -c libfoo
_EOF_
}
@@ -74,6 +76,14 @@ artixpkg_git() {
artixpkg_git_pull "$@"
exit 0
;;
push)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/git/push.sh
source "${LIBDIR}"/pkg/git/push.sh
artixpkg_git_push "$@"
exit 0
;;
-*)
die "invalid argument: %s" "$1"
;;

View File

@@ -21,12 +21,12 @@ artixpkg_git_clone_usage() {
--protocol https Clone the repository over https
-t, --topic=NAME Clone all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
--universe Clone all existing packages, useful for cache warming
--all Clone all existing packages, useful for cache warming
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo linux libbar
$ ${COMMAND} --maintainer maintainer-mynickname
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --topic myopic
$ ${COMMAND} -j 8 --topic myopic
_EOF_
@@ -90,7 +90,7 @@ artixpkg_git_clone() {
TOPIC="${1#*=}"
shift
;;
--universe)
--all)
CLONE_ALL=1
shift
;;
@@ -115,24 +115,18 @@ artixpkg_git_clone() {
# Query packages of a maintainer
if [[ -n ${MAINTAINER} ]]; then
stat_busy "Query mantainer packages"
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
stat_done
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
fi
if [[ -n ${TOPIC} ]]; then
stat_busy "Query topic packages"
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
stat_done
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
fi
# Query all released packages
if (( CLONE_ALL )); then
stat_busy "Query all packages"
mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
stat_done
mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
fi
# parallelization

View File

@@ -7,13 +7,12 @@ ARTOOLS_INCLUDE_GIT_CONFIG_SH=1
# shellcheck source=src/lib/pkg/db/db.sh
source "${LIBDIR}"/pkg/db/db.sh
# shellcheck source=src/lib/pkg/db/migrate.sh
source "${LIBDIR}"/pkg/db/migrate.sh
set -e
commit_ci(){
[[ -d .artixlinux ]] || mkdir .artixlinux
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
{
printf '\n'
@@ -37,8 +36,8 @@ artixpkg_git_config_usage() {
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} -t libfoo
$ ${COMMAND} -u libfoo
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --upstream libfoo
$ ${COMMAND} *
_EOF_
}
@@ -262,13 +261,6 @@ artixpkg_git_config() {
fi
fi
migrate_to_yaml
if [[ -f Jenkinsfile ]]; then
git mv Jenkinsfile "${REPO_CI}"
git commit -m "move jenkinsfile"
fi
if [[ ! -f ${REPO_CI} ]]; then
msg "Adding ci support ..."
commit_ci

View File

@@ -5,9 +5,6 @@
[[ -z ${ARTOOLS_INCLUDE_GIT_PULL_SH:-} ]] || return 0
ARTOOLS_INCLUDE_GIT_PULL_SH=1
# shellcheck source=src/lib/pkg/git/config.sh
source "${LIBDIR}"/pkg/git/config.sh
set -e
@@ -20,14 +17,14 @@ artixpkg_git_pull_usage() {
-m, --maintainer=NAME Pull all packages of the named maintainer
-t, --topic=NAME Pull all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
--universe Pull all existing packages
--all Pull all existing packages
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo linux libbar
$ ${COMMAND} --maintainer maintainer-mynickname
$ ${COMMAND} --topic myopic
$ ${COMMAND} -j 8 --topic myopic
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --topic mytopic
$ ${COMMAND} -j 8 --topic mytopic
_EOF_
}
@@ -73,7 +70,7 @@ artixpkg_git_pull() {
TOPIC="${1#*=}"
shift
;;
--universe)
--all)
PULL_ALL=1
shift
;;
@@ -98,24 +95,18 @@ artixpkg_git_pull() {
# Query packages of a maintainer
if [[ -n ${MAINTAINER} ]]; then
stat_busy "Query mantainer packages"
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
stat_done
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
fi
if [[ -n ${TOPIC} ]]; then
stat_busy "Query topic packages"
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
stat_done
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
fi
# Query all released packages
if (( PULL_ALL )); then
stat_busy "Query all packages"
mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
stat_done
mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
fi
# parallelization

128
src/lib/pkg/git/push.sh Normal file
View File

@@ -0,0 +1,128 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_GIT_PUSH_SH:-} ]] || return 0
ARTOOLS_INCLUDE_GIT_PUSH_SH=1
set -e
artixpkg_git_push_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-m, --maintainer=NAME Push all packages of the named maintainer
-t, --topic=NAME Push all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo linux libbar
$ ${COMMAND} --maintainer tux
$ ${COMMAND} --topic mytopic
$ ${COMMAND} -j 8 --topic mytopic
_EOF_
}
artixpkg_git_push() {
if (( $# < 1 )); then
artixpkg_git_push_usage
exit 0
fi
# options
local MAINTAINER=
local TOPIC=
local CONFIGURE_OPTIONS=()
local jobs=
jobs=$(nproc)
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
while (( $# )); do
case $1 in
-h|--help)
artixpkg_git_push_usage
exit 0
;;
-m|--maintainer)
(( $# <= 1 )) && die "missing argument for %s" "$1"
MAINTAINER="$2"
shift 2
;;
--maintainer=*)
MAINTAINER="${1#*=}"
shift
;;
-t|--topic)
(( $# <= 1 )) && die "missing argument for %s" "$1"
TOPIC="$2"
shift 2
;;
--topic=*)
TOPIC="${1#*=}"
shift
;;
-j|--jobs)
(( $# <= 1 )) && die "missing argument for %s" "$1"
jobs=$2
shift 2
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
pkgbases=("$@")
break
;;
esac
done
# Query packages of a maintainer
if [[ -n ${MAINTAINER} ]]; then
local maint
maint="maintainer-${MAINTAINER}"
mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
fi
if [[ -n ${TOPIC} ]]; then
mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
fi
# parallelization
if [[ ${jobs} != 1 ]] && (( ${#pkgbases[@]} > 1 )); then
# force colors in parallel if parent process is colorized
if [[ -n ${BOLD} ]]; then
export ARTOOLS_COLOR=always
fi
if ! parallel --bar --jobs "${jobs}" "${command}" ::: "${pkgbases[@]}"; then
die 'Failed to push some packages, please check the output'
exit 1
fi
exit 0
fi
for pkgbase in "${pkgbases[@]}"; do
if [[ -d ${pkgbase} ]]; then
( cd ${pkgbase} || return
msg "Pushing ${pkgbase} ..."
if ! git push origin master; then
die 'failed to push %s' "${pkgbase}"
fi
)
else
warning "Skip pushing ${pkgbase}: Directory does not exist"
fi
done
}

View File

@@ -11,6 +11,33 @@ source "${LIBDIR}"/pkg/db/db.sh
set -e
check_pkgbuild_validity() {
# shellcheck source=contrib/makepkg/PKGBUILD.proto
. ./PKGBUILD
# skip when there are no sources available
if (( ! ${#source[@]} )); then
return
fi
# validate sources hash algo is at least > sha1
local bad_algos=("cksums" "md5sums" "sha1sums")
local good_hash_algo=false
# from makepkg libmakepkg/util/schema.sh
for integ in "${known_hash_algos[@]}"; do
local sumname="${integ}sums"
if [[ -n ${!sumname} ]] && ! in_array "${sumname}" "${bad_algos[@]}"; then
good_hash_algo=true
break
fi
done
if ! $good_hash_algo; then
die "PKGBUILD lacks a secure cryptographic checksum, insecure algorithms: ${bad_algos[*]}"
fi
}
artixpkg_repo_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_

View File

@@ -17,19 +17,16 @@ patch_pkgbase(){
case "${name}" in
glibc)
msg "Patching %s" "${name}"
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i "${pkgbuild}"
;;
linux|linux-lts|linux-zen|linux-hardened|linux-rt|linux-rt-lts)
msg "Patching %s" "${name}"
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i "${pkgbuild}"
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-i config
;;
gstreamer|gst-plugins-*|licenses)
msg "Patching %s" "${name}"
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i "${pkgbuild}"
@@ -65,7 +62,7 @@ artixpkg_repo_import() {
local TAG
local rsync_args=()
rsync_args+=(-aWxvci --progress --delete-before --no-R --no-implied-dirs)
rsync_args+=(--exclude '.git' --exclude '.gitignore' --exclude 'README.md')
rsync_args+=(--exclude '.git' --exclude '.gitignore' --exclude 'README.md' --exclude '.artixlinux')
while (( $# )); do
case $1 in

View File

@@ -22,6 +22,7 @@ usage() {
COMMANDS
repo Pacman database modification for packge update, move etc
git Manage Git packaging repositories and their configuration
admin Managegement of topics and obsolete repos
version Show artixpkg version information
OPTIONS

View File

@@ -18,16 +18,20 @@ rebuild=false
mkchrootpkg_args=(-c -n)
cmd=${0##*/}
repo=${cmd#*-}
base_devel=('base-devel')
base_packages=('base-devel')
chroots_pkg="${CHROOTS_DIR}/buildpkg"
arch=$(uname -m)
cmd=${0##*/}
tag=${cmd#buildpkg-}
arch=${tag##*-}
repo=${tag%-*}
usage() {
printf 'Usage: %s [options] -- [mkchrootpkg_args]\n' "${0##*/}"
printf ' -r <dir> Create chroots in this directory\n'
printf ' -d <dir> Destination repo chroot\n'
printf ' -a <arch> Build arch chroot\n'
printf ' -c Recreate the chroot before building\n'
printf ' -m Major rebuild\n'
printf ' -N Disable check() function\n'
@@ -39,35 +43,46 @@ usage() {
exit "$1"
}
opts='hcCNmr:d:'
opts='hcCNmr:d:a:'
while getopts "${opts}" arg; do
case "${arg}" in
r) chroots_pkg="$OPTARG" ;;
d) repo="$OPTARG" ;;
a) arch="$OPTARG" ;;
c) create_first=true ;;
m) rebuild=true ;;
m) rebuild=true; repo=${repo%-*} ;;
C) mkchrootpkg_args+=(-C) ;;
N) mkchrootpkg_args+=(-N) ;;
h|?) usage 0 ;;
esac
done
if ${rebuild};then
repo='default'
else
case ${repo} in
system|world|galaxy) repo='default' ;;
lib32*) base_devel+=('multilib-devel') ;;
*-gremlins|*-goblins) repo=${repo#*-} ;;
esac
if [[ "${repo}" == lib32* ]]; then
base_packages+=('multilib-devel')
fi
pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf"
[[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf"
if [[ -f ${USER_CONF_DIR}/pacman.conf.d/${repo}.conf ]]; then
pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf"
fi
if [[ -f ${DATADIR}/pacman.conf.d/${repo}-${arch}.conf ]]; then
pacman_conf="${DATADIR}/pacman.conf.d/${repo}-${arch}.conf"
if [[ -f ${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf ]]; then
pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf"
fi
fi
makepkg_conf="${DATADIR}/makepkg.conf.d/${arch}.conf"
[[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf"
if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]]; then
makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf"
fi
if [[ -f ${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then
makepkg_conf="${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf"
if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then
makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf"
fi
fi
if [[ -f "${DATADIR}/setarch-aliases.d/${arch}" ]]; then
read -r set_arch < "${DATADIR}/setarch-aliases.d/${arch}"
@@ -76,19 +91,19 @@ else
fi
# Architecture-specific Mount
# arch_mounts=()
# if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then
# mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}"
# fi
# for arch_mount in "${arch_mounts[@]}"; do
# if [[ $arch_mount = rw* ]]; then
# arch_mount=${arch_mount#rw }
# in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-d" "$arch_mount")
# elif [[ $arch_mount = ro* ]]; then
# arch_mount=${arch_mount#ro }
# in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-D" "$arch_mount")
# fi
# done
arch_mounts=()
if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then
mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}"
fi
for arch_mount in "${arch_mounts[@]}"; do
if [[ $arch_mount = rw* ]]; then
arch_mount=${arch_mount#rw }
in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-B:$arch_mount")
elif [[ $arch_mount = ro* ]]; then
arch_mount=${arch_mount#ro }
in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-Br:$arch_mount")
fi
done
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME "${BASH_SOURCE[0]}" "$@"
@@ -114,7 +129,7 @@ if ${create_first} || [[ ! -d "${chroots_pkg}/${repo}-${arch}" ]];then
-C "${pacman_conf}" \
-M "${makepkg_conf}" \
"${chroots_pkg}/${repo}-${arch}/root" \
"${base_devel[@]}" || abort
"${base_packages[@]}" || abort
else
lock 9 "${chroots_pkg}/${repo}-${arch}/root.lock" "Locking clean chroot"
chroot-run \

View File

@@ -23,41 +23,66 @@ usage() {
list for both packages and a library list for both packages.
OPTIONS
-r, --rmdir Remove the temporary directory
-w, --warn Print a warning in case of differences
-h, --help Show this help text
-r, --rmdir Remove the temporary directory
-w, --warn Print a warning in case of differences
-M, --makepkg-config Set an alternate makepkg configuration file
-h, --help Show this help text
_EOF_
}
RMDIR=0
WARN=0
MAKEPKG_CONF=/etc/makepkg.conf
OPT_SHORT='rwh'
OPT_LONG=('rmdir' 'warn' 'help')
if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
exit 1
fi
set -- "${OPTRET[@]}"
while :; do
# option checking
while (( $# )); do
case $1 in
-r|--rmdir)
RMDIR=1
;;
-w|--warn)
WARN=1
;;
-h|--help)
usage
exit 0
;;
-r|--rmdir)
RMDIR=1
shift
;;
-w|--warn)
WARN=1
shift
;;
-M|--makepkg-config)
MAKEPKG_CONF="$2"
shift 2
;;
--)
shift; break
shift
break
;;
-*|--*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
shift
done
# Source makepkg.conf; fail if it is not found
if [[ -r "${MAKEPKG_CONF}" ]]; then
# shellcheck source=config/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
@@ -84,8 +109,10 @@ for _pkgname in "${pkgname[@]}"; do
if (( $# )); then
case $1 in
*://*)
pkgurl=$1 ;;
/*|*/*)
pkgurl=file://$(readlink -m "$1") ;;
pkgurl=$(readlink -m "$1") ;;
*.pkg.tar*)
pkgurl=$1 ;;
'')

View File

@@ -29,6 +29,7 @@ clean_first=0
run_namcap=0
run_checkpkg=0
temp_chroot=0
tmp_opts="nosuid,nodev,size=50%,nr_inodes=2m"
bindmounts=''
@@ -47,7 +48,7 @@ usage() {
printf ' <chrootdir>/{root, copy} but only "root" is required\n'
printf ' by default. The working copy will be created as needed\n'
printf '\n'
printf "The chroot 'root' directory must be created via the following\n"
printf 'The chroot "root" directory must be created via the following\n'
printf 'command:\n'
printf ' mkchroot <chrootdir>/root base-devel\n'
printf '\n'
@@ -60,26 +61,24 @@ usage() {
printf 'Flags:\n'
printf ' -h This help\n'
printf ' -c Clean the chroot before building\n'
printf ' -d <dir> Bind directory into build chroot as read-write\n'
printf ' -D <dir> Bind directory into build chroot as read-only\n'
printf ' -b <arg> Bind mount directory/file into build chroot\n'
printf ' -u Update the working copy of the chroot before building\n'
printf ' This is useful for rebuilds without dirtying the pristine\n'
printf ' chroot\n'
printf ' This is useful for rebuilds without dirtying the pristine\n'
printf ' chroot\n'
printf ' -r <dir> The chroot dir to use\n'
printf ' -I <pkg> Install a package into the working copy of the chroot\n'
printf ' -l <copy> The directory to use as the working copy of the chroot\n'
printf ' Useful for maintaining multiple copies\n'
printf ' Default: %s\n' "$copy"
printf ' -n Run namcap on the package\n'
printf ' -C Run checkpkg on the package\n'
printf ' -N Disable check() function\n'
printf ' -C Run checkpkg on the package\n'
printf ' -T Build in a temporary directory\n'
printf ' -U Run makepkg as a specified user\n'
exit 1
}
# {{{ functions
# Usage: sync_chroot $chrootdir $copydir [$copy]
sync_chroot() {
local chrootdir=$1
@@ -142,9 +141,7 @@ install_packages() {
pkgnames=("${install_pkgs[@]##*/}")
cp -- "${install_pkgs[@]}" "$copydir/root/"
chroot-run \
-b "${bindmounts}" \
"$copydir" \
chroot-run -b "${bindmounts}" "$copydir" \
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
ret=$?
rm -- "${pkgnames[@]/#/$copydir/root/}"
@@ -208,8 +205,6 @@ _chrootbuild() {
# No coredumps
ulimit -c 0
. /etc/locale.conf
# shellcheck source=/dev/null
. /etc/profile
@@ -354,13 +349,11 @@ if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir" "$copydir" "$copy"
fi
(( update_first )) && chroot-run \
-b "${bindmounts}" \
"$copydir" \
pacman -Syuu --noconfirm
if [[ -n ${install_pkgs[*]:-} ]]; then
install_packages
ret=$?
@@ -378,6 +371,7 @@ download_sources
prepare_chroot
if chroot-run \
-t "${tmp_opts}" \
-b "${bindmounts} -B:${PWD}:/startdir -B:${SRCDEST}:/srcdest" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
@@ -409,6 +403,7 @@ else
warning "Skipped checkpkg due to missing repo packages"
exit 0
fi
# download package files if any non-local location exists
for remotepkg in "${remotepkgs[@]}"; do
if [[ $remotepkg != file://* ]]; then
@@ -420,8 +415,9 @@ else
break
fi
done
msg2 "Checking packages"
sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}"
sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}"
fi
true
fi