Compare commits

...

32 Commits

Author SHA1 Message Date
08fff866ed mkchrootpkg: source locale.conf in chroot 2023-07-23 20:22:15 +02:00
8bef697c44 remove deploypkg compat symlink 2023-07-23 19:32:22 +02:00
a6eadf1af4 artixpkg: don't query actions 2023-07-23 12:58:44 +02:00
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
473a5ce6aa artixpkg: add basic token check 2023-06-26 18:57:56 +02:00
f511f7c0e9 merge branch 'admin' 2023-06-26 16:15:00 +02:00
bbca425bf8 artixpkg: fix migration of non compliant pkgbase names 2023-06-26 15:58:36 +02:00
10fe40eccb artixpkg: make maintainer flags consistent 2023-06-26 15:33:16 +02:00
6ce9a5b751 artixpkg: fix repo args (#79)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: #79
2023-06-26 15:10:30 +02:00
108dcf620a migrate-ci (#78)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: #78
2023-06-25 17:16:55 +02:00
7fc2909a29 Merge pull request 'Add other kernels to patch_pkgbase()' (#77) from Qontinuum/artools:master into master
Reviewed-on: #77
2023-06-25 17:16:22 +02:00
Qontinuum
f248c20401 Add other kernels to patch_pkgbase() 2023-06-24 14:56:24 +02:00
1516ef432e artixpkg repo: show git status if changes 2023-06-23 00:13:57 +02:00
cc3bd8049c artixpkg (#76)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: #76
2023-06-22 23:03:49 +02:00
42 changed files with 1244 additions and 358 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)

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

66
src/lib/pkg/admin.sh Normal file
View File

@@ -0,0 +1,66 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_SH=1
set -e
artixpkg_admin_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS
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_
}
artixpkg_admin() {
if (( $# < 1 )); then
artixpkg_admin_usage
exit 0
fi
# option checking
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_usage
exit 0
;;
transfer)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/transfer.sh
source "${LIBDIR}"/pkg/admin/transfer.sh
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"
;;
*)
die "invalid command: %s" "$1"
;;
esac
done
}

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

@@ -0,0 +1,66 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_TRANSFER_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_TRANSFER_SH=1
set -e
artixpkg_admin_transfer_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo
$ ${COMMAND} libfoo libbar
_EOF_
}
artixpkg_admin_transfer() {
if (( $# < 1 )); then
artixpkg_admin_transfer_usage
exit 0
fi
# options
local pkgbases=()
local pkgbase
local waste_org="landfill"
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_transfer_usage
exit 0
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
pkgbases+=("$@")
if [[ -n ${GIT_TOKEN} ]]; then
for pkgbase in "${pkgbases[@]}"; do
transfer_repo "${pkgbase}" "${waste_org}"
done
fi
}

View File

@@ -4,24 +4,15 @@
#{{{ gitea api #{{{ gitea api
get_compliant() { get_compliant_name() {
local name=$1 local name=$1
printf "%s" "${name}" \ printf "%s\n" "${name}" \
| sed -E 's/([a-zA-Z0-9]+)\+([a-zA-Z]+)/\1-\2/g' \ | sed -E 's/([a-zA-Z0-9]+)\+([a-zA-Z]+)/\1-\2/g' \
| sed -E 's/\+/plus/g' \ | sed -E 's/\+/plus/g' \
| sed -E 's/[^a-zA-Z0-9_\-\.]/-/g' \ | sed -E 's/[^a-zA-Z0-9_\-\.]/-/g' \
| sed -E 's/[_\-]{2,}/-/g' | sed -E 's/[_\-]{2,}/-/g'
} }
get_compliant_name(){
local gitname="$1"
case "$gitname" in
*+) gitname=${gitname//+/plus} ;;
*+*) gitname=${gitname//+/-} ;;
esac
printf "%s\n" "$gitname"
}
api_put() { api_put() {
curl -s -X PUT "$@" curl -s -X PUT "$@"
} }
@@ -103,34 +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
replace_topic() {
local url
local repo="$1"
local maintainer="$2"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$repo/topics"
api_put "$url" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: token ${GIT_TOKEN}" \
-d "{
\"topics\": [
\"${maintainer}\"
]
}"
}
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

@@ -19,6 +19,8 @@ readonly ARTIX_DB=(
readonly REPO_DB='.artixlinux/pkgbase.yaml' readonly REPO_DB='.artixlinux/pkgbase.yaml'
readonly REPO_CI='.artixlinux/Jenkinsfile'
yaml_array() { yaml_array() {
local array local array
@@ -135,13 +137,14 @@ update_yaml_base() {
local name local name
local pkgnames local pkgnames
local arches local arches
local pkgbase
name="${pkgbase:-${pkgname}}" pkgbase="${pkgbase:-${pkgname}}"
version="$(get_full_version)" version="$(get_full_version)"
pkgnames=$(yaml_array "${pkgname[@]}") pkgnames=$(yaml_array "${pkgname[@]}")
arches=$(yaml_array "${arch[@]}") arches=$(yaml_array "${arch[@]}")
name="${name}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \ name="${pkgbase}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
yq -P 'with( yq -P 'with(
.pkgbase; .pkgbase;
.name = env(name) | .name = env(name) |
@@ -274,7 +277,8 @@ show_db() {
if ! yq -r ${REPO_DB} 1>/dev/null 2>/dev/null; then if ! yq -r ${REPO_DB} 1>/dev/null 2>/dev/null; then
die "${REPO_DB} invalid!" die "${REPO_DB} invalid!"
fi fi
yq -rP '. | .repos |= with_entries(select(.value.version))' "${REPO_DB}" yq -rP '. | with_entries(select(.value.name))' "${REPO_DB}"
yq -rP '. | .repos | with_entries(select(.value.version))' "${REPO_DB}"
return 0 return 0
} }

View File

@@ -1,79 +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
cp -r trunk/* ./
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}"
done
git rm -r x86_64
fi
git rm -r trunk
if [[ -f .artixlinux/agent.yaml ]]; then
git rm .artixlinux/agent.yaml
fi
if [[ -f .gitignore ]]; then
update_gitignore
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

@@ -17,16 +17,16 @@ artixpkg_git_clone_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]... Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS OPTIONS
-m, --maintainer=NAME Clone all packages of the named maintainer -m, --maintainer=NAME Clone all packages of the named maintainer
--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,22 +7,19 @@ 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(){
local ci=Jenkinsfile [[ -d .artixlinux ]] || mkdir .artixlinux
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${ci}"
{ {
printf '\n' printf '\n'
printf 'PackagePipeline(new RepoPackage(this))\n' printf 'PackagePipeline(new RepoPackage(this))\n'
} >> "${ci}" } >> "${REPO_CI}"
git add "${ci}" git add "${REPO_CI}"
git commit -m "initial ci commit" git commit -m "initial ci commit"
} }
@@ -32,15 +29,15 @@ artixpkg_git_config_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]... Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS OPTIONS
-t, --topic Set the maintainer topic via gitea api -m, --maintainer Set the maintainer topic via gitea api
-u, --upstream Add upstream arch remote -u, --upstream Add upstream arch remote
--protocol https Configure remote url to use https --protocol https Configure remote url to use https
-j, --jobs N Run up to N jobs in parallel (default: $(nproc)) -j, --jobs N Run up to N jobs in parallel (default: $(nproc))
-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_
} }
@@ -117,7 +114,7 @@ artixpkg_git_config() {
artixpkg_git_config_usage artixpkg_git_config_usage
exit 0 exit 0
;; ;;
-t|--topic) -m|--maintainer)
SET_TOPIC=1 SET_TOPIC=1
shift shift
;; ;;
@@ -264,9 +261,7 @@ artixpkg_git_config() {
fi fi
fi fi
migrate_to_yaml if [[ ! -f ${REPO_CI} ]]; then
if [[ ! -f Jenkinsfile ]]; then
msg "Adding ci support ..." msg "Adding ci support ..."
commit_ci commit_ci
fi fi

View File

@@ -19,9 +19,9 @@ artixpkg_git_create_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]... Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS OPTIONS
-c, --clone Clone the Git repository after creation -c, --clone Clone the Git repository after creation
-t, --team=NAME Assign team name [default: world] -t, --team=NAME Assign team name [default: world]
-h, --help Show this help text -h, --help Show this help text
EXAMPLES EXAMPLES
$ ${COMMAND} libfoo $ ${COMMAND} libfoo
@@ -92,13 +92,15 @@ artixpkg_git_create() {
for pkgbase in "${pkgbases[@]}"; do for pkgbase in "${pkgbases[@]}"; do
local gitname local gitname
gitname=$(get_compliant_name "${pkgbase}") gitname=$(get_compliant_name "${pkgbase}")
if ! create_repo "${gitname}" >/dev/null; then if [[ -n ${GIT_TOKEN} ]]; then
die "failed to create project: ${pkgbase}" if ! create_repo "${gitname}" >/dev/null; then
die "failed to create project: ${pkgbase}"
fi
if ! add_team_to_repo "${gitname}" "${TEAM}" >/dev/null; then
warning "failed to assign team: ${TEAM}"
fi
msg_success "Successfully created ${pkgbase}"
fi fi
if ! add_team_to_repo "${gitname}" "${TEAM}" >/dev/null; then
warning "failed to assign team: ${TEAM}"
fi
msg_success "Successfully created ${pkgbase}"
if (( clone )); then if (( clone )); then
artixpkg_git_clone "${pkgbase}" artixpkg_git_clone "${pkgbase}"
elif (( config )); then elif (( config )); then

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
@@ -17,17 +14,17 @@ artixpkg_git_pull_usage() {
Usage: ${COMMAND} [OPTIONS] [PKGBASE]... Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS OPTIONS
-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,17 +11,44 @@ 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_
Usage: ${COMMAND} [COMMAND] [OPTIONS] Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS COMMANDS
add Add built pkgbase to repo add Add built pkgbase to repo
move Move built pkgbase between repos move Move built pkgbase between repos
remove Remove built pkgbase from repo remove Remove built pkgbase from repo
import Import latest tag from arch upstream import Import latest tag from arch upstream
show Show the pkgbase's repo db show Show the pkgbase's repo db
OPTIONS OPTIONS
-h, --help Show this help text -h, --help Show this help text

View File

@@ -14,10 +14,10 @@ artixpkg_repo_add_usage() {
Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]... Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
OPTIONS OPTIONS
-p, --push Push pkgbase -p, --push Push pkgbase
-r, --rebuild Triggers a rebuild -r, --rebuild Triggers a rebuild
-n, --nocheck Disable the check function -n, --nocheck Disable the check function
-h, --help Show this help text -h, --help Show this help text
EXAMPLES EXAMPLES
$ ${COMMAND} world-gremlins libfoo $ ${COMMAND} world-gremlins libfoo
@@ -69,6 +69,7 @@ artixpkg_repo_add() {
done done
DEST="$1" DEST="$1"
shift
pkgbases+=("$@") pkgbases+=("$@")
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then

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|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 'Jenkinsfile' --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

@@ -56,6 +56,7 @@ artixpkg_repo_remove() {
done done
DEST="$1" DEST="$1"
shift
pkgbases=("$@") pkgbases=("$@")
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then

View File

@@ -12,10 +12,11 @@ has_changeset(){
git fetch origin &>/dev/null git fetch origin &>/dev/null
if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then
msg2 "remote changes: yes" msg2 "changes: yes"
git status -sb
return 0 return 0
fi fi
msg2 "remote changes: no" msg2 "changes: no"
return 1 return 1
} }

View File

@@ -0,0 +1,43 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_VERSION_SH:-} ]] || return 0
ARTOOLS_INCLUDE_VERSION_SH=1
set -e
artixpkg_version_usage() {
COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS]
Shows the current version information of artixpkg
OPTIONS
-h, --help Show this help text
_EOF_
}
artixpkg_version_print() {
cat <<- _EOF_
artixpkg @buildtoolver@
_EOF_
}
artixpkg_version() {
while (( $# )); do
case $1 in
-h|--help)
artixpkg_version_usage
exit 0
;;
*)
die "invalid argument: %s" "$1"
;;
esac
done
artixpkg_version_print
}

View File

@@ -22,6 +22,8 @@ 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
OPTIONS OPTIONS
-h, --help Show this help text -h, --help Show this help text
@@ -67,6 +69,22 @@ while (( $# )); do
artixpkg_git "$@" artixpkg_git "$@"
exit 0 exit 0
;; ;;
admin)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin.sh
source "${LIBDIR}"/pkg/admin.sh
artixpkg_admin "$@"
exit 0
;;
version|--version|-V)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/version/version.sh
source "${LIBDIR}"/pkg/version/version.sh
artixpkg_version "$@"
exit 0
;;
*) *)
die "invalid command: %s" "$1" die "invalid command: %s" "$1"
;; ;;

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,11 +205,11 @@ _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
. /etc/locale.conf
# Beware, there are some stupid arbitrary rules on how you can # Beware, there are some stupid arbitrary rules on how you can
# use "$" in arguments to commands with "sudo -i". ${foo} or # use "$" in arguments to commands with "sudo -i". ${foo} or
# ${1} is OK, but $foo or $1 isn't. # ${1} is OK, but $foo or $1 isn't.
@@ -354,13 +351,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 +373,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 +405,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 +417,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