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

View File

@@ -88,15 +88,6 @@ Include = /etc/pacman.d/mirrorlist
[world] [world]
Include = /etc/pacman.d/mirrorlist 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, # If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here. # enable the lib32 repositories as required here.

View File

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

View File

@@ -82,12 +82,6 @@ Include = /etc/pacman.d/mirrorlist
[world] [world]
Include = /etc/pacman.d/mirrorlist 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, # If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here. # 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 # SPDX-License-Identifier: GPL-3.0-or-later
LIBDIR=${LIBDIR:-'@libdir@'} LIBDIR=${LIBDIR:-'@libdir@'}
DATADIR=${DATADIR:-'@datadir@'}
# shellcheck source=src/lib/base/message.sh # shellcheck source=src/lib/base/message.sh
source "${LIBDIR}"/base/message.sh source "${LIBDIR}"/base/message.sh
@@ -36,8 +37,8 @@ kill_chroot_process(){
umask 0022 umask 0022
working_dir='' working_dir=''
files=()
files=()
mount_args=("-B:/etc/hosts:/etc/hosts") mount_args=("-B:/etc/hosts:/etc/hosts")
usage() { usage() {
@@ -50,15 +51,18 @@ usage() {
printf ' -c <dir> Set pacman cache\n' printf ' -c <dir> Set pacman cache\n'
printf ' -f <file> Copy file from the host to the chroot\n' printf ' -f <file> Copy file from the host to the chroot\n'
printf ' -s Do not run setarch\n' printf ' -s Do not run setarch\n'
printf ' -b <list> Bind mountargs\n' printf ' -t <opts> tmpfs mount opts\n'
printf ' List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]\n' printf ' -b <args> Bind mountargs\n'
printf ' Format:\n'
printf ' "arg1:src1:dest1 arg2:src2:dest2"\n'
printf ' -h This message\n' printf ' -h This message\n'
exit 1 exit 1
} }
# save all args for check_root
orig_args=("$@") orig_args=("$@")
opts='hC:M:c:b:f:s' opts='hC:M:c:b:f:t:s'
while getopts ${opts} arg; do while getopts ${opts} arg; do
case "${arg}" in case "${arg}" in
@@ -67,14 +71,15 @@ while getopts ${opts} arg; do
c) cache_dirs+=("$OPTARG") ;; c) cache_dirs+=("$OPTARG") ;;
f) files+=("$OPTARG") ;; f) files+=("$OPTARG") ;;
s) nosetarch=1 ;; s) nosetarch=1 ;;
t) tmpfs_opts="$OPTARG" ;;
b) bindmounts="$OPTARG"; mount_args+=(${bindmounts}) ;; b) bindmounts="$OPTARG"; mount_args+=(${bindmounts}) ;;
h|?) usage ;; h|?) usage ;;
*) error "invalid argument '%s'" "$arg"; usage ;;
esac esac
done done
shift $(( OPTIND - 1 )) shift $((OPTIND - 1))
(( $# < 1 )) && die 'You must specify a directory.' (( $# < 1 )) && die 'You must specify a directory.'
check_root "" "${BASH_SOURCE[0]}" "${orig_args[@]}" check_root "" "${BASH_SOURCE[0]}" "${orig_args[@]}"
working_dir=$(readlink -f "$1") working_dir=$(readlink -f "$1")
@@ -83,7 +88,7 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.' [[ -z $working_dir ]] && die 'Please specify a working directory.'
if (( ${#cache_dirs[@]} == 0 )); then 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 fi
# shellcheck disable=2016 # 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 for host_mirror in "${host_mirrors[@]}"; do
if [[ $host_mirror == *file://* ]]; then if [[ $host_mirror == *file://* ]]; then
# shellcheck disable=2016 host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
host_mirror=$(printf "%s\n" "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') for m in "$host_mirror"/pool/*/; do
in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror") in_array "$m" "${cache_dirs[@]}" || cache_dirs+=("$m")
done
fi fi
done done
while read -r line; do while read -r line; do
# shellcheck disable=2016 mapfile -t lines < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" \
mapfile -t lines < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
--repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#') --repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#')
for line in "${lines[@]}"; do for line in "${lines[@]}"; do
if [[ $line = file://* ]]; then if [[ $line = file://* ]]; then
@@ -107,7 +112,15 @@ while read -r line; do
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line") in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
fi fi
done 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 () { 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 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" 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 local file
for file in "${files[@]}"; do for file in "${files[@]}"; do
@@ -125,15 +138,9 @@ copy_hostconf () {
cp -T "$file" "$working_dir$file" cp -T "$file" "$working_dir$file"
done 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_extra_mount() {
chroot_add_resolv_conf "${working_dir}" chroot_add_resolv_conf "${working_dir}"
@@ -147,27 +154,28 @@ chroot_extra_mount() {
done done
} }
# }}}
umask 0022 umask 0022
# Sanity check # Sanity check
if [[ ! -f "$working_dir/.artools" ]]; then if [[ ! -f "$working_dir/.artix-chroot" ]]; then
die "'%s' does not appear to be an artix chroot." "$working_dir" die "'%s' does not appear to be an Artix chroot." "$working_dir"
elif [[ $(cat "$working_dir/.artools") != "${CHROOTVERSION}" ]]; then elif [[ $(cat "$working_dir/.artix-chroot") != "${CHROOTVERSION}" ]]; then
die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
fi 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 chroot_extra_mount
copy_hostconf copy_hostconf
eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")" eval "$(grep -a '^CARCH=' "$working_dir/etc/makepkg.conf")"
[[ -z $nosetarch ]] || unset CARCH [[ -z $nosetarch ]] || unset CARCH
if [[ -f "${DATADIR}/setarch-aliases.d/${CARCH}" ]]; then
if [[ -f "/usr/share/artools/artools/setarch-aliases.d/${CARCH}" ]]; then read -r set_arch < "${DATADIR}/setarch-aliases.d/${CARCH}"
read -r set_arch < "/usr/share/artools/artools/setarch-aliases.d/${CARCH}"
else else
set_arch="${CARCH}" set_arch="${CARCH}"
fi 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 '%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 'LANG=C.UTF-8\n' > "$working_dir/etc/locale.conf"
# printf 'KEYMAP=en\n' > "$working_dir/etc/vconsole.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 dbus-uuidgen --ensure="$working_dir"/etc/machine-id

View File

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

View File

@@ -56,6 +56,7 @@ chroot_mount_conditional() {
chroot_setup(){ chroot_setup(){
local mnt="$1" local mnt="$1"
local tmpfs_opts="${2:-mode=1777,strictatime,nodev,nosuid}"
chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind && chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind &&
chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev && chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev &&
chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro && 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 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 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 /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_api_mount() {
CHROOT_ACTIVE_MOUNTS=() CHROOT_ACTIVE_MOUNTS=()
trap_setup chroot_api_umount trap_setup chroot_api_umount
chroot_setup "$1" chroot_setup "$1" "$2"
} }
chroot_api_umount() { chroot_api_umount() {

View File

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

View File

@@ -13,13 +13,16 @@ artixpkg_admin_usage() {
Usage: ${COMMAND} [COMMAND] [OPTIONS] Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS COMMANDS
transfer Clone a package repository transfer Transfer obsolete repository to landfill
query Query maintainers and topics
OPTIONS OPTIONS
-h, --help Show this help text -h, --help Show this help text
EXAMPLES EXAMPLES
$ ${COMMAND} transfer libfoo libbar $ ${COMMAND} transfer libfoo libbar
$ ${COMMAND} query --maintainer tux
$ ${COMMAND} query --topic kf5
_EOF_ _EOF_
} }
@@ -44,6 +47,14 @@ artixpkg_admin() {
artixpkg_admin_transfer "$@" artixpkg_admin_transfer "$@"
exit 0 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" 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 local url
url="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000" url="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000"
stat_busy "Query all packages"
api_get "$url" \ api_get "$url" \
-H "accept: application/json" -H "accept: application/json"
} stat_done
list_topics() {
local url
local pkgbase="$1"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$pkgbase/topics"
api_get "$url" \
-H "accept: application/json"
} }
add_topic() { 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 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 clone Clone a package repository
config Configure a clone according to artix specs config Configure a clone according to artix specs
create Create a new Gitea package repository create Create a new Gitea package repository
pull Pull a package repository
push Push a package repository
OPTIONS OPTIONS
-h, --help Show this help text -h, --help Show this help text
EXAMPLES EXAMPLES
$ ${COMMAND} clone libfoo linux libbar $ ${COMMAND} clone libfoo linux libbar
$ ${COMMAND} clone --maintainer maintainer-mynickname $ ${COMMAND} clone --maintainer tux
$ ${COMMAND} config -t libfoo $ ${COMMAND} config --topic mytopic
$ ${COMMAND} config -u libfoo $ ${COMMAND} config --maintainer tux
$ ${COMMAND} create libfoo $ ${COMMAND} create -c libfoo
_EOF_ _EOF_
} }
@@ -74,6 +76,14 @@ artixpkg_git() {
artixpkg_git_pull "$@" artixpkg_git_pull "$@"
exit 0 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" die "invalid argument: %s" "$1"
;; ;;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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