forked from artix/artools
		
	Compare commits
	
		
			45 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3ed0c310a3 | |||
| b1213d5c2c | |||
| 
						
						
							
						
						26dffde972
	
				 | 
					
					
						|||
| 915eca6c2e | |||
| 
						
						
							
						
						a52e32d740
	
				 | 
					
					
						|||
| 
						
						
							
						
						34ed4ef723
	
				 | 
					
					
						|||
| aaa319c67a | |||
| 
						
						
							
						
						3304c888a5
	
				 | 
					
					
						|||
| 
						
						
							
						
						095c7ced45
	
				 | 
					
					
						|||
| f4eef7a3cd | |||
| 
						
						
							
						
						6fc1850f1f
	
				 | 
					
					
						|||
| c0a3a7e796 | |||
| 
						
						
							
						
						08fff866ed
	
				 | 
					
					
						|||
| 
						
						
							
						
						8bef697c44
	
				 | 
					
					
						|||
| a6eadf1af4 | |||
| 
						
						
							
						
						2595cd2a3a
	
				 | 
					
					
						|||
| 1917c252aa | |||
| 
						
						
							
						
						4c458bf242
	
				 | 
					
					
						|||
| 
						
						
							
						
						5b00c80698
	
				 | 
					
					
						|||
| 98c3c8c5b0 | |||
| 
						
						
							
						
						0786c46474
	
				 | 
					
					
						|||
| 
						
						
							
						
						d22406b308
	
				 | 
					
					
						|||
| 87ea01db9b | |||
| cb347b511a | |||
| 
						
						
							
						
						e15d70f732
	
				 | 
					
					
						|||
| 
						
						
							
						
						5ad0d72378
	
				 | 
					
					
						|||
| 
						
						
							
						
						f8dccbf59e
	
				 | 
					
					
						|||
| 
						
						
							
						
						a3bcbd40d2
	
				 | 
					
					
						|||
| 
						
						
							
						
						7a6c7e61de
	
				 | 
					
					
						|||
| 
						
						
							
						
						b517c7dcf8
	
				 | 
					
					
						|||
| b5c3decf9b | |||
| 
						
						
							
						
						de2d4bb4de
	
				 | 
					
					
						|||
| 
						
						
							
						
						f2eb80f1ab
	
				 | 
					
					
						|||
| 
						
						
							
						
						5f2ac0a406
	
				 | 
					
					
						|||
| 
						
						
							
						
						473a5ce6aa
	
				 | 
					
					
						|||
| 
						
						
							
						
						f511f7c0e9
	
				 | 
					
					
						|||
| 
						
						
							
						
						bbca425bf8
	
				 | 
					
					
						|||
| 
						
						
							
						
						10fe40eccb
	
				 | 
					
					
						|||
| 6ce9a5b751 | |||
| 108dcf620a | |||
| 7fc2909a29 | |||
| 
						 | 
					f248c20401 | ||
| 
						
						
							
						
						1516ef432e
	
				 | 
					
					
						|||
| cc3bd8049c | |||
| 13d6f8ba37 | 
							
								
								
									
										25
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								Makefile
									
									
									
									
									
								
							@@ -3,7 +3,7 @@ SHELL=/bin/bash
 | 
			
		||||
V=0.31
 | 
			
		||||
BUILDTOOLVER ?= $(V)
 | 
			
		||||
 | 
			
		||||
CHROOTVER=0.11
 | 
			
		||||
CHROOTVER=0.12
 | 
			
		||||
 | 
			
		||||
TOOLS = artools
 | 
			
		||||
SYSCONFDIR = /etc
 | 
			
		||||
@@ -36,24 +36,6 @@ TOOLS_CONFIGS_BASE=$(wildcard config/conf/*base*)
 | 
			
		||||
TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*)
 | 
			
		||||
TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*)
 | 
			
		||||
 | 
			
		||||
LN_BUILDPKG = \
 | 
			
		||||
	buildpkg-system \
 | 
			
		||||
	buildpkg-system-gremlins \
 | 
			
		||||
	buildpkg-system-goblins \
 | 
			
		||||
	buildpkg-world \
 | 
			
		||||
	buildpkg-world-gremlins \
 | 
			
		||||
	buildpkg-world-goblins \
 | 
			
		||||
	buildpkg-lib32 \
 | 
			
		||||
	buildpkg-lib32-gremlins \
 | 
			
		||||
	buildpkg-lib32-goblins \
 | 
			
		||||
	buildpkg-galaxy \
 | 
			
		||||
	buildpkg-galaxy-gremlins \
 | 
			
		||||
	buildpkg-galaxy-goblins
 | 
			
		||||
 | 
			
		||||
LN_BUILDISO = \
 | 
			
		||||
	buildiso-gremlins \
 | 
			
		||||
	buildiso-goblins
 | 
			
		||||
 | 
			
		||||
all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso
 | 
			
		||||
binprogs_base: $(BINPROGS_BASE)
 | 
			
		||||
binprogs_pkg: $(BINPROGS_PKG)
 | 
			
		||||
@@ -130,7 +112,6 @@ install_pkg: binprogs_pkg
 | 
			
		||||
 | 
			
		||||
	for conf in $(notdir $(MAKEPKG_CONFIGS)); do install -Dm0644 $(BUILDDIR)/makepkg.conf.d/$$conf $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
 | 
			
		||||
	for a in $(SETARCH_ALIASES); do install -m0644 $$a -t $(DESTDIR)$(DATADIR)/setarch-aliases.d; done
 | 
			
		||||
	for l in $(LN_BUILDPKG); do ln -sf buildpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
 | 
			
		||||
	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
 | 
			
		||||
 | 
			
		||||
install_iso: binprogs_iso
 | 
			
		||||
@@ -142,8 +123,6 @@ install_iso: binprogs_iso
 | 
			
		||||
 | 
			
		||||
	for conf in $(notdir $(TOOLS_CONFIGS_ISO)); do install -Dm0644 $(BUILDDIR)/$(TOOLS)/$$conf $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)/$${conf##*/}; done
 | 
			
		||||
 | 
			
		||||
	for l in $(LN_BUILDISO); do ln -sf buildiso $(DESTDIR)$(PREFIX)/bin/$$l; done
 | 
			
		||||
 | 
			
		||||
install: all install_base install_pkg install_iso
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
@@ -154,8 +133,6 @@ uninstall:
 | 
			
		||||
	for conf in $(notdir $(MAKEPKG_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/makepkg.conf.d/$${conf##*/}; done
 | 
			
		||||
	for conf in $(notdir $(PACMAN_CONFIGS)); do rm -f $(DESTDIR)$(DATADIR)/pacman.conf.d/$${conf##*/}; done
 | 
			
		||||
	for f in $(notdir $(SETARCH_ALIASES)); do rm -f $(DESTDIR)$(DATADIR)/setarch-aliases.d/$$f; done
 | 
			
		||||
	for l in $(LN_BUILDPKG); do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 | 
			
		||||
	for l in $(LN_BUILDISO); do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 | 
			
		||||
	rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
 | 
			
		||||
	rmdir --ignore-fail-on-non-empty \
 | 
			
		||||
		$(DESTDIR)$(DATADIR)/setarch-aliases.d \
 | 
			
		||||
 
 | 
			
		||||
@@ -74,11 +74,11 @@ Specifying args will override artools-{base,pkg,iso}.conf settings.
 | 
			
		||||
Both, pacman.conf and makepkg.conf for chroots are loaded from
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
usr/share/artools/makepkg.conf.d/makepkg.conf
 | 
			
		||||
usr/share/artools/makepkg.conf.d/${arch}.conf
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
usr/share/artools/pacmanconf.d/${repo}.conf
 | 
			
		||||
usr/share/artools/pacmanconf.d/${repo}-${arch}.conf
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
and can be overridden dropping them in
 | 
			
		||||
 
 | 
			
		||||
@@ -10,3 +10,11 @@
 | 
			
		||||
 | 
			
		||||
# the workspace directory
 | 
			
		||||
# WORKSPACE_DIR="${USER_HOME}/artools-workspace"
 | 
			
		||||
 | 
			
		||||
# the arch to build
 | 
			
		||||
# ARCH=$(uname -m)
 | 
			
		||||
 | 
			
		||||
# default pacman.conf repos to include
 | 
			
		||||
# possible buildpkg values: {system,world,galaxy,lib32}{-gremlins,-goblins}
 | 
			
		||||
# possible buildiso values: {world,galaxy}{-gremlins,-goblins}
 | 
			
		||||
# REPO="world"
 | 
			
		||||
 
 | 
			
		||||
@@ -70,27 +70,30 @@ LocalFileSigLevel = Optional
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
[galaxy-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
[lib32-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[lib32-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
@@ -70,39 +70,21 @@ LocalFileSigLevel = Optional
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
[galaxy-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
[lib32-goblins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[lib32-gremlins]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
@@ -82,12 +82,6 @@ Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
[world]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
#[galaxy-gremlins]
 | 
			
		||||
#Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
[galaxy]
 | 
			
		||||
Include = /etc/pacman.d/mirrorlist
 | 
			
		||||
 | 
			
		||||
# If you want to run 32 bit applications on your x86_64 system,
 | 
			
		||||
# enable the lib32 repositories as required here.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										95
									
								
								config/pacman/system-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								config/pacman/system-goblins-x86_64.conf
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										89
									
								
								config/pacman/system-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/system-gremlins-x86_64.conf
									
									
									
									
									
										Normal 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-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/system-x86_64.conf
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										95
									
								
								config/pacman/world-goblins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								config/pacman/world-goblins-x86_64.conf
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										89
									
								
								config/pacman/world-gremlins-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/world-gremlins-x86_64.conf
									
									
									
									
									
										Normal 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-x86_64.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/world-x86_64.conf
									
									
									
									
									
										Normal 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
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
DATADIR=${DATADIR:-'@datadir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
@@ -36,8 +37,8 @@ kill_chroot_process(){
 | 
			
		||||
umask 0022
 | 
			
		||||
 | 
			
		||||
working_dir=''
 | 
			
		||||
files=()
 | 
			
		||||
 | 
			
		||||
files=()
 | 
			
		||||
mount_args=("-B:/etc/hosts:/etc/hosts")
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
@@ -50,15 +51,18 @@ usage() {
 | 
			
		||||
    printf '    -c <dir>      Set pacman cache\n'
 | 
			
		||||
    printf '    -f <file>     Copy file from the host to the chroot\n'
 | 
			
		||||
    printf '    -s            Do not run setarch\n'
 | 
			
		||||
    printf '    -b <list>     Bind mountargs\n'
 | 
			
		||||
    printf '                  List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]\n'
 | 
			
		||||
    printf '    -t <opts>     tmpfs mount opts\n'
 | 
			
		||||
    printf '    -b <args>     Bind mountargs\n'
 | 
			
		||||
    printf '                  Format:\n'
 | 
			
		||||
    printf '                  "arg1:src1:dest1 arg2:src2:dest2"\n'
 | 
			
		||||
    printf '    -h            This message\n'
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# save all args for check_root
 | 
			
		||||
orig_args=("$@")
 | 
			
		||||
 | 
			
		||||
opts='hC:M:c:b:f:s'
 | 
			
		||||
opts='hC:M:c:b:f:t:s'
 | 
			
		||||
 | 
			
		||||
while getopts ${opts} arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
@@ -67,14 +71,15 @@ while getopts ${opts} arg; do
 | 
			
		||||
        c) cache_dirs+=("$OPTARG") ;;
 | 
			
		||||
        f) files+=("$OPTARG") ;;
 | 
			
		||||
        s) nosetarch=1 ;;
 | 
			
		||||
        t) tmpfs_opts="$OPTARG" ;;
 | 
			
		||||
        b) bindmounts="$OPTARG"; mount_args+=(${bindmounts}) ;;
 | 
			
		||||
        h|?) usage ;;
 | 
			
		||||
        *) error "invalid argument '%s'" "$arg"; usage ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
shift $(( OPTIND - 1 ))
 | 
			
		||||
shift $((OPTIND - 1))
 | 
			
		||||
 | 
			
		||||
(( $# < 1 )) && die 'You must specify a directory.'
 | 
			
		||||
 | 
			
		||||
check_root "" "${BASH_SOURCE[0]}" "${orig_args[@]}"
 | 
			
		||||
 | 
			
		||||
working_dir=$(readlink -f "$1")
 | 
			
		||||
@@ -83,7 +88,7 @@ shift 1
 | 
			
		||||
[[ -z $working_dir ]] && die 'Please specify a working directory.'
 | 
			
		||||
 | 
			
		||||
if (( ${#cache_dirs[@]} == 0 )); then
 | 
			
		||||
    mapfile -t cache_dirs < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
 | 
			
		||||
    mapfile -t cache_dirs < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" CacheDir)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# shellcheck disable=2016
 | 
			
		||||
@@ -91,15 +96,15 @@ mapfile -t host_mirrors < <(pacman-conf --repo world Server 2> /dev/null | sed -
 | 
			
		||||
 | 
			
		||||
for host_mirror in "${host_mirrors[@]}"; do
 | 
			
		||||
    if [[ $host_mirror == *file://* ]]; then
 | 
			
		||||
        # shellcheck disable=2016
 | 
			
		||||
        host_mirror=$(printf "%s\n" "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
 | 
			
		||||
        in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror")
 | 
			
		||||
        host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
 | 
			
		||||
        for m in "$host_mirror"/pool/*/; do
 | 
			
		||||
            in_array "$m" "${cache_dirs[@]}" || cache_dirs+=("$m")
 | 
			
		||||
        done
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
while read -r line; do
 | 
			
		||||
    # shellcheck disable=2016
 | 
			
		||||
    mapfile -t lines < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
 | 
			
		||||
    mapfile -t lines < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" \
 | 
			
		||||
        --repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#')
 | 
			
		||||
    for line in "${lines[@]}"; do
 | 
			
		||||
        if [[ $line = file://* ]]; then
 | 
			
		||||
@@ -107,7 +112,15 @@ while read -r line; do
 | 
			
		||||
            in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
done < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
 | 
			
		||||
done < <(pacman-conf --config "${pacman_conf:-$working_dir/etc/pacman.conf}" --repo-list)
 | 
			
		||||
 | 
			
		||||
mount_args+=("-B:${cache_dirs[0]//:/\\:}:${cache_dirs[0]//:/\\:}")
 | 
			
		||||
 | 
			
		||||
for cache_dir in "${cache_dirs[@]:1}"; do
 | 
			
		||||
    mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}")
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# {{{ functions
 | 
			
		||||
 | 
			
		||||
copy_hostconf () {
 | 
			
		||||
    unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
 | 
			
		||||
@@ -115,9 +128,9 @@ copy_hostconf () {
 | 
			
		||||
 | 
			
		||||
    printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
 | 
			
		||||
 | 
			
		||||
    [[ -n $pacman_conf ]] && cp "$pacman_conf" "${working_dir}/etc/pacman.conf"
 | 
			
		||||
    [[ -n $pacman_conf ]] && cp "$pacman_conf" "$working_dir/etc/pacman.conf"
 | 
			
		||||
 | 
			
		||||
    [[ -n $makepkg_conf ]] && cp "$makepkg_conf" "${working_dir}/etc/makepkg.conf"
 | 
			
		||||
    [[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
 | 
			
		||||
 | 
			
		||||
    local file
 | 
			
		||||
    for file in "${files[@]}"; do
 | 
			
		||||
@@ -125,15 +138,9 @@ copy_hostconf () {
 | 
			
		||||
        cp -T "$file" "$working_dir$file"
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "${working_dir}/etc/pacman.conf"
 | 
			
		||||
    sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "$working_dir/etc/pacman.conf"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mount_args+=("-B:${cache_dirs[0]//:/\\:}:${cache_dirs[0]//:/\\:}")
 | 
			
		||||
 | 
			
		||||
for cache_dir in "${cache_dirs[@]:1}"; do
 | 
			
		||||
    mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}")
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
chroot_extra_mount() {
 | 
			
		||||
    chroot_add_resolv_conf "${working_dir}"
 | 
			
		||||
 | 
			
		||||
@@ -147,27 +154,28 @@ chroot_extra_mount() {
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
umask 0022
 | 
			
		||||
 | 
			
		||||
# Sanity check
 | 
			
		||||
if [[ ! -f "$working_dir/.artools" ]]; then
 | 
			
		||||
    die "'%s' does not appear to be an artix chroot." "$working_dir"
 | 
			
		||||
elif [[ $(cat "$working_dir/.artools") != "${CHROOTVERSION}" ]]; then
 | 
			
		||||
if [[ ! -f "$working_dir/.artix-chroot" ]]; then
 | 
			
		||||
    die "'%s' does not appear to be an Artix chroot." "$working_dir"
 | 
			
		||||
elif [[ $(cat "$working_dir/.artix-chroot") != "${CHROOTVERSION}" ]]; then
 | 
			
		||||
    die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
 | 
			
		||||
chroot_api_mount "${working_dir}" "${tmpfs_opts}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
 | 
			
		||||
 | 
			
		||||
chroot_extra_mount
 | 
			
		||||
 | 
			
		||||
copy_hostconf
 | 
			
		||||
 | 
			
		||||
eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
 | 
			
		||||
eval "$(grep -a '^CARCH=' "$working_dir/etc/makepkg.conf")"
 | 
			
		||||
 | 
			
		||||
[[ -z $nosetarch ]] || unset CARCH
 | 
			
		||||
 | 
			
		||||
if [[ -f "/usr/share/artools/artools/setarch-aliases.d/${CARCH}" ]]; then
 | 
			
		||||
    read -r set_arch < "/usr/share/artools/artools/setarch-aliases.d/${CARCH}"
 | 
			
		||||
if [[ -f "${DATADIR}/setarch-aliases.d/${CARCH}" ]]; then
 | 
			
		||||
    read -r set_arch < "${DATADIR}/setarch-aliases.d/${CARCH}"
 | 
			
		||||
else
 | 
			
		||||
    set_arch="${CARCH}"
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,7 @@ unshare --mount basestrap -${umode}Mc ${pacman_conf:+-C "$pacman_conf"} "$workin
 | 
			
		||||
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
 | 
			
		||||
printf 'LANG=C.UTF-8\n' > "$working_dir/etc/locale.conf"
 | 
			
		||||
# printf 'KEYMAP=en\n' > "$working_dir/etc/vconsole.conf"
 | 
			
		||||
printf "%s\n" "${CHROOTVERSION}" > "$working_dir/.artools"
 | 
			
		||||
printf "%s\n" "${CHROOTVERSION}" > "$working_dir/.artix-chroot"
 | 
			
		||||
 | 
			
		||||
dbus-uuidgen --ensure="$working_dir"/etc/machine-id
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -184,7 +184,7 @@ gen_iso_fn(){
 | 
			
		||||
    vars+=("${profile}")
 | 
			
		||||
    vars+=("${INITSYS}")
 | 
			
		||||
    case "${repo}" in
 | 
			
		||||
        'gremlins'|'goblins') vars+=("${repo}") ;;
 | 
			
		||||
        *-gremlins|*-goblins) vars+=("${repo#*-}") ;;
 | 
			
		||||
    esac
 | 
			
		||||
    vars+=("${ISO_VERSION}")
 | 
			
		||||
    vars+=("${arch}")
 | 
			
		||||
@@ -197,12 +197,10 @@ gen_iso_fn(){
 | 
			
		||||
prepare_build(){
 | 
			
		||||
    load_profile
 | 
			
		||||
 | 
			
		||||
    case "${repo}" in
 | 
			
		||||
        buildiso) repo=default ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf"
 | 
			
		||||
    [[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf"
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    iso_file=$(gen_iso_fn).iso
 | 
			
		||||
 | 
			
		||||
@@ -328,17 +326,21 @@ boot_only=false
 | 
			
		||||
basestrap_args=(-GMc)
 | 
			
		||||
cmd=${0##*/}
 | 
			
		||||
 | 
			
		||||
repo=${cmd##*-}
 | 
			
		||||
repo=${REPO}
 | 
			
		||||
owner=${SUDO_USER:-$USER}
 | 
			
		||||
profile='base'
 | 
			
		||||
chroots_iso="${CHROOTS_DIR}/buildiso"
 | 
			
		||||
arch=$(uname -m)
 | 
			
		||||
arch=${ARCH}
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    printf 'Usage: %s [options]\n' "${cmd}"
 | 
			
		||||
    printf '    -p <profile>       Profile [default: %s]\n' "${profile}"
 | 
			
		||||
    printf '    -r <dir>           Chroots directory\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${chroots_iso}"
 | 
			
		||||
    printf '    -R <repo>          Build repo\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${repo}"
 | 
			
		||||
    printf '    -a <arch>          Build arch\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${arch}"
 | 
			
		||||
    printf '    -t <dir>           Target directory\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${ISO_POOL}"
 | 
			
		||||
    printf '    -i <name>          Init system to use\n'
 | 
			
		||||
@@ -362,11 +364,13 @@ usage() {
 | 
			
		||||
 | 
			
		||||
orig_args=("$@")
 | 
			
		||||
 | 
			
		||||
opts='p:r:t:i:g:czsbxmdqh'
 | 
			
		||||
opts='p:r:R:t:i:g:a:czsbxmdqh'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        p) profile="$OPTARG" ;;
 | 
			
		||||
        a) arch="$OPTARG" ;;
 | 
			
		||||
        R) repo="$OPTARG" ;;
 | 
			
		||||
        r) chroots_iso="$OPTARG" ;;
 | 
			
		||||
        t) ISO_POOL="$OPTARG" ;;
 | 
			
		||||
        i) INITSYS="$OPTARG" ;;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,7 @@ chroot_mount_conditional() {
 | 
			
		||||
 | 
			
		||||
chroot_setup(){
 | 
			
		||||
    local mnt="$1"
 | 
			
		||||
    local tmpfs_opts="${2:-mode=1777,strictatime,nodev,nosuid}"
 | 
			
		||||
    chroot_mount_conditional "! mountpoint -q '$mnt'" "$mnt" "$mnt" --bind &&
 | 
			
		||||
    chroot_mount proc "$mnt/proc" -t proc -o nosuid,noexec,nodev &&
 | 
			
		||||
    chroot_mount sys "$mnt/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
 | 
			
		||||
@@ -65,13 +66,13 @@ chroot_setup(){
 | 
			
		||||
    chroot_mount devpts "$mnt/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec &&
 | 
			
		||||
    chroot_mount shm "$mnt/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev &&
 | 
			
		||||
    chroot_mount /run "$mnt/run" -t tmpfs -o nosuid,nodev,mode=0755 &&
 | 
			
		||||
    chroot_mount tmp "$mnt/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
 | 
			
		||||
    chroot_mount tmp "$mnt/tmp" -t tmpfs -o "${tmpfs_opts}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
chroot_api_mount() {
 | 
			
		||||
    CHROOT_ACTIVE_MOUNTS=()
 | 
			
		||||
    trap_setup chroot_api_umount
 | 
			
		||||
    chroot_setup "$1"
 | 
			
		||||
    chroot_setup "$1" "$2"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
chroot_api_umount() {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,10 @@ load_base_config(){
 | 
			
		||||
 | 
			
		||||
    WORKSPACE_DIR=${WORKSPACE_DIR:-"${USER_HOME}/artools-workspace"}
 | 
			
		||||
 | 
			
		||||
    ARCH=${ARCH:-"$(uname -m)"}
 | 
			
		||||
 | 
			
		||||
    REPO=${REPO:-'world'}
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ prepare_initramfs_mkinitcpio() {
 | 
			
		||||
    [[ "${profile}" == 'base' ]] && mkinitcpio_conf=mkinitcpio-pxe.conf
 | 
			
		||||
    k=$(<"$mnt"/usr/src/linux/version)
 | 
			
		||||
 | 
			
		||||
    read_from_list "${common_dir}/Packages-boot"
 | 
			
		||||
    packages+=($(read_from_list "${common_dir}/Packages-boot"))
 | 
			
		||||
    basestrap "${basestrap_args[@]}" "$mnt" "${packages[@]}"
 | 
			
		||||
 | 
			
		||||
    if [[ -n "${GPG_KEY}" ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								src/lib/pkg/admin.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/lib/pkg/admin.sh
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										89
									
								
								src/lib/pkg/admin/query.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/lib/pkg/admin/query.sh
									
									
									
									
									
										Normal 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
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								src/lib/pkg/admin/transfer.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/lib/pkg/admin/transfer.sh
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
@@ -4,24 +4,15 @@
 | 
			
		||||
 | 
			
		||||
#{{{ gitea api
 | 
			
		||||
 | 
			
		||||
get_compliant() {
 | 
			
		||||
get_compliant_name() {
 | 
			
		||||
    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/\+/plus/g' \
 | 
			
		||||
    | sed -E 's/[^a-zA-Z0-9_\-\.]/-/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() {
 | 
			
		||||
    curl -s -X PUT "$@"
 | 
			
		||||
}
 | 
			
		||||
@@ -72,7 +63,7 @@ create_repo() {
 | 
			
		||||
    local pkgbase="$1"
 | 
			
		||||
    local url json
 | 
			
		||||
    url="${GIT_HTTPS}/api/v1/org/${GIT_ORG}/repos"
 | 
			
		||||
    json="{ \"auto_init\": true, \"name\": \"$pkgbase\", \"gitignores\": \"ArchLinuxPackages\", \"readme\": \"Default\" }"
 | 
			
		||||
    json="{ \"auto_init\": true, \"name\": \"$pkgbase\", \"gitignores\": \"ArtixLinuxPackages\", \"readme\": \"Default\" }"
 | 
			
		||||
 | 
			
		||||
    stat_busy "Create package repo [$pkgbase] in org (${GIT_ORG})"
 | 
			
		||||
    api_post "$url" \
 | 
			
		||||
@@ -103,34 +94,10 @@ list_all_repos() {
 | 
			
		||||
    local url
 | 
			
		||||
    url="${GIT_HTTPS}/api/v1/orgs/${GIT_ORG}/repos?limit=10000"
 | 
			
		||||
 | 
			
		||||
    stat_busy "Query all packages"
 | 
			
		||||
    api_get "$url" \
 | 
			
		||||
        -H "accept: application/json"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
    stat_done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
add_topic() {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,8 @@ readonly ARTIX_DB=(
 | 
			
		||||
 | 
			
		||||
readonly REPO_DB='.artixlinux/pkgbase.yaml'
 | 
			
		||||
 | 
			
		||||
readonly REPO_CI='.artixlinux/Jenkinsfile'
 | 
			
		||||
 | 
			
		||||
yaml_array() {
 | 
			
		||||
    local array
 | 
			
		||||
 | 
			
		||||
@@ -136,12 +138,12 @@ update_yaml_base() {
 | 
			
		||||
    local pkgnames
 | 
			
		||||
    local arches
 | 
			
		||||
 | 
			
		||||
    name="${pkgbase:-${pkgname}}"
 | 
			
		||||
    pkgbase="${pkgbase:-${pkgname}}"
 | 
			
		||||
    version="$(get_full_version)"
 | 
			
		||||
    pkgnames=$(yaml_array "${pkgname[@]}")
 | 
			
		||||
    arches=$(yaml_array "${arch[@]}")
 | 
			
		||||
 | 
			
		||||
    name="${name}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
 | 
			
		||||
    name="${pkgbase}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
 | 
			
		||||
        yq -P 'with(
 | 
			
		||||
            .pkgbase;
 | 
			
		||||
                .name = env(name) |
 | 
			
		||||
@@ -274,6 +276,15 @@ show_db() {
 | 
			
		||||
    if ! yq -r ${REPO_DB} 1>/dev/null 2>/dev/null; then
 | 
			
		||||
        die "${REPO_DB} invalid!"
 | 
			
		||||
    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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_srcinfo_base() {
 | 
			
		||||
    pkg2yaml . | yq '.pkgbase'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
show_srcinfo_pkgs() {
 | 
			
		||||
    pkg2yaml . | yq '.pkgnames'
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local_head(){
 | 
			
		||||
    git log --pretty=%H ...refs/heads/master^ | head -n 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
remote_head(){
 | 
			
		||||
    git ls-remote origin -h refs/heads/master | cut -f1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
has_changeset(){
 | 
			
		||||
    msg "Checking remote for changes"
 | 
			
		||||
    if [[ "$(local_head)" != "$(remote_head)" ]]; then
 | 
			
		||||
        msg2 "remote changes: yes"
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
    msg2 "remote changes: no"
 | 
			
		||||
    return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
commit_ci(){
 | 
			
		||||
    local ci=Jenkinsfile
 | 
			
		||||
 | 
			
		||||
    printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${ci}"
 | 
			
		||||
    {
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    printf 'PackagePipeline(new RepoPackage(this))\n'
 | 
			
		||||
    } >> "${ci}"
 | 
			
		||||
 | 
			
		||||
    git add "${ci}"
 | 
			
		||||
    git commit -m "initial ci commit"
 | 
			
		||||
}
 | 
			
		||||
@@ -1,68 +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
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
        git add .
 | 
			
		||||
        git commit -m "migrate to new layout"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
@@ -31,13 +31,4 @@ find_cached_pkgfile() {
 | 
			
		||||
 | 
			
		||||
shopt -u extglob
 | 
			
		||||
 | 
			
		||||
get_pkgbasename() {
 | 
			
		||||
    local name="$1"
 | 
			
		||||
    local rm_pkg=${name%.pkg.tar*}
 | 
			
		||||
    rm_pkg=${rm_pkg%-*}
 | 
			
		||||
    rm_pkg=${rm_pkg%-*}
 | 
			
		||||
    rm_pkg=${rm_pkg%-*}
 | 
			
		||||
    printf "%s\n" "$rm_pkg"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#}}}
 | 
			
		||||
 
 | 
			
		||||
@@ -16,16 +16,18 @@ artixpkg_git_usage() {
 | 
			
		||||
        clone          Clone a package repository
 | 
			
		||||
        config         Configure a clone according to artix specs
 | 
			
		||||
        create         Create a new Gitea package repository
 | 
			
		||||
        pull           Pull a package repository
 | 
			
		||||
        push           Push a package repository
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} clone libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} clone --maintainer maintainer-mynickname
 | 
			
		||||
        $ ${COMMAND} config -t libfoo
 | 
			
		||||
        $ ${COMMAND} config -u libfoo
 | 
			
		||||
        $ ${COMMAND} create libfoo
 | 
			
		||||
        $ ${COMMAND} clone --maintainer tux
 | 
			
		||||
        $ ${COMMAND} config --topic mytopic
 | 
			
		||||
        $ ${COMMAND} config --maintainer tux
 | 
			
		||||
        $ ${COMMAND} create -c libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -74,6 +76,14 @@ artixpkg_git() {
 | 
			
		||||
            artixpkg_git_pull "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        push)
 | 
			
		||||
            _ARTOOLS_COMMAND+=" $1"
 | 
			
		||||
            shift
 | 
			
		||||
            # shellcheck source=src/lib/pkg/git/push.sh
 | 
			
		||||
            source "${LIBDIR}"/pkg/git/push.sh
 | 
			
		||||
            artixpkg_git_push "$@"
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
 
 | 
			
		||||
@@ -17,16 +17,17 @@ artixpkg_git_clone_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME  Clone all packages of the named maintainer
 | 
			
		||||
        --protocol https       Clone the repository over https
 | 
			
		||||
        -t, --topic=NAME       Clone all packages of the named topic
 | 
			
		||||
        -j, --jobs N           Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --universe             Clone all existing packages, useful for cache warming
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
        -m, --maintainer=NAME      Clone all packages of the named maintainer
 | 
			
		||||
        --protocol https           Clone the repository over https
 | 
			
		||||
        -t, --topic=NAME           Clone all packages of the named topic
 | 
			
		||||
        -a, --agent=NAME           Set the CI agent (default: official)
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --all                      Clone all existing packages, useful for cache warming
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} --maintainer maintainer-mynickname
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --topic myopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic myopic
 | 
			
		||||
_EOF_
 | 
			
		||||
@@ -90,7 +91,16 @@ artixpkg_git_clone() {
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --universe)
 | 
			
		||||
            -a|--agent)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                CONFIGURE_OPTIONS+=("$1" "$2")
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --agent=*)
 | 
			
		||||
                CONFIGURE_OPTIONS+=("${1#*=}")
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --all)
 | 
			
		||||
                CLONE_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -115,24 +125,18 @@ artixpkg_git_clone() {
 | 
			
		||||
 | 
			
		||||
    # Query packages of a maintainer
 | 
			
		||||
    if [[ -n ${MAINTAINER} ]]; then
 | 
			
		||||
        stat_busy "Query mantainer packages"
 | 
			
		||||
            local maint
 | 
			
		||||
            maint="maintainer-${MAINTAINER}"
 | 
			
		||||
            mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        local maint
 | 
			
		||||
        maint="maintainer-${MAINTAINER}"
 | 
			
		||||
        mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ -n ${TOPIC} ]]; then
 | 
			
		||||
        stat_busy "Query topic packages"
 | 
			
		||||
            mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Query all released packages
 | 
			
		||||
    if (( CLONE_ALL )); then
 | 
			
		||||
        stat_busy "Query all packages"
 | 
			
		||||
            mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # parallelization
 | 
			
		||||
 
 | 
			
		||||
@@ -7,29 +7,42 @@ ARTOOLS_INCLUDE_GIT_CONFIG_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/db.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/git.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/git.sh
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/migrate.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/migrate.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
commit_ci(){
 | 
			
		||||
    [[ -d .artixlinux ]] || mkdir .artixlinux
 | 
			
		||||
    if [[ ${AGENT} == ${ARTIX_DB[11]} ]]; then
 | 
			
		||||
        printf "@Library('artix-ci@${AGENT}') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
 | 
			
		||||
    else
 | 
			
		||||
        printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
 | 
			
		||||
    fi
 | 
			
		||||
    {
 | 
			
		||||
        printf '\n'
 | 
			
		||||
        printf 'PackagePipeline(new RepoPackage(this))\n'
 | 
			
		||||
    } >> "${REPO_CI}"
 | 
			
		||||
 | 
			
		||||
    git add "${REPO_CI}"
 | 
			
		||||
    git commit -m "initial ci commit"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_git_config_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -t, --topic        Set the maintainer topic via gitea api
 | 
			
		||||
        -u, --upstream     Add upstream arch remote
 | 
			
		||||
        --protocol https     Configure remote url to use https
 | 
			
		||||
        -j, --jobs N       Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -m, --maintainer       Set the maintainer topic via gitea api
 | 
			
		||||
        -u, --upstream         Add upstream arch remote
 | 
			
		||||
        -a, --agent=NAME       Set the CI agent (default: official)
 | 
			
		||||
        --protocol https       Configure remote url to use https
 | 
			
		||||
        -j, --jobs N           Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} -t libfoo
 | 
			
		||||
        $ ${COMMAND} -u libfoo
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --upstream libfoo
 | 
			
		||||
        $ ${COMMAND} *
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
@@ -94,6 +107,8 @@ artixpkg_git_config() {
 | 
			
		||||
 | 
			
		||||
    local SET_TOPIC=0
 | 
			
		||||
    local UPSTREAM=0
 | 
			
		||||
    local AGENT=
 | 
			
		||||
    local CI_ADDED=0
 | 
			
		||||
 | 
			
		||||
    # variables
 | 
			
		||||
    local -r command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
@@ -106,7 +121,7 @@ artixpkg_git_config() {
 | 
			
		||||
            artixpkg_git_config_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -t|--topic)
 | 
			
		||||
        -m|--maintainer)
 | 
			
		||||
            SET_TOPIC=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
@@ -114,6 +129,15 @@ artixpkg_git_config() {
 | 
			
		||||
            UPSTREAM=1
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -a|--agent)
 | 
			
		||||
            (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
            AGENT="$2"
 | 
			
		||||
            shift 2
 | 
			
		||||
        ;;
 | 
			
		||||
        --agent=*)
 | 
			
		||||
            AGENT="${1#*=}"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        --protocol=https)
 | 
			
		||||
            proto_force=1
 | 
			
		||||
            shift
 | 
			
		||||
@@ -201,7 +225,7 @@ artixpkg_git_config() {
 | 
			
		||||
    for path in "${paths[@]}"; do
 | 
			
		||||
        if ! realpath=$(realpath -e "${path}"); then
 | 
			
		||||
            error "No such directory: ${path}"
 | 
			
		||||
#             continue
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        pkgbase=$(basename "${realpath}")
 | 
			
		||||
@@ -210,7 +234,7 @@ artixpkg_git_config() {
 | 
			
		||||
 | 
			
		||||
        if [[ ! -d "${path}/.git" ]]; then
 | 
			
		||||
            error "Not a Git repository: ${path}"
 | 
			
		||||
#             continue
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
        ( cd "${path}" || return
 | 
			
		||||
            git config pull.rebase true
 | 
			
		||||
@@ -253,16 +277,20 @@ artixpkg_git_config() {
 | 
			
		||||
                fi
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            migrate_to_yaml
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f Jenkinsfile ]]; then
 | 
			
		||||
            if [[ ! -f ${REPO_CI} ]]; then
 | 
			
		||||
                msg "Adding ci support ..."
 | 
			
		||||
                commit_ci
 | 
			
		||||
                CI_ADDED=1
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ -n ${AGENT} ]] && (( ! CI_ADDED )); then
 | 
			
		||||
                msg "Switching ci support for [%s] ..." "${AGENT}"
 | 
			
		||||
                commit_ci
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            if [[ ! -f ${REPO_DB} ]]; then
 | 
			
		||||
 | 
			
		||||
                msg "Adding repo db ..."
 | 
			
		||||
                msg "Creating repo db ..."
 | 
			
		||||
                create_repo_db
 | 
			
		||||
 | 
			
		||||
                if [[ -f PKGBUILD ]]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ artixpkg_git_create_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -c, --clone       Clone the Git repository after creation
 | 
			
		||||
        -t, --team=NAME   Assign team name [default: world]
 | 
			
		||||
        -h, --help        Show this help text
 | 
			
		||||
        -c, --clone           Clone the Git repository after creation
 | 
			
		||||
        -t, --team=NAME       Assign team name [default: world]
 | 
			
		||||
        -h, --help            Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo
 | 
			
		||||
@@ -34,9 +34,15 @@ artixpkg_git_create() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local clone=0
 | 
			
		||||
    local config=0
 | 
			
		||||
    local TEAM='world'
 | 
			
		||||
    local TEAM="${ARTIX_DB[5]}"
 | 
			
		||||
    local OPTIONS=()
 | 
			
		||||
 | 
			
		||||
    local TEAMS=(system world lib32)
 | 
			
		||||
    local TEAMS=(
 | 
			
		||||
        "${ARTIX_DB[2]}"
 | 
			
		||||
        "${ARTIX_DB[5]}"
 | 
			
		||||
        "${ARTIX_DB[8]}"
 | 
			
		||||
        "${ARTIX_DB[11]}"
 | 
			
		||||
        )
 | 
			
		||||
    # variables
 | 
			
		||||
    local path
 | 
			
		||||
 | 
			
		||||
@@ -92,17 +98,22 @@ artixpkg_git_create() {
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
        local gitname
 | 
			
		||||
        gitname=$(get_compliant_name "${pkgbase}")
 | 
			
		||||
        if ! create_repo "${gitname}" >/dev/null; then
 | 
			
		||||
            die "failed to create project: ${pkgbase}"
 | 
			
		||||
        if [[ -n ${GIT_TOKEN} ]]; then
 | 
			
		||||
            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
 | 
			
		||||
        if ! add_team_to_repo "${gitname}" "${TEAM}" >/dev/null; then
 | 
			
		||||
            warning "failed to assign team: ${TEAM}"
 | 
			
		||||
        if [[ ${TEAM} == ${ARTIX_DB[11]} ]]; then
 | 
			
		||||
            OPTIONS+=(--agent="${TEAM}")
 | 
			
		||||
        fi
 | 
			
		||||
        msg_success "Successfully created ${pkgbase}"
 | 
			
		||||
        if (( clone )); then
 | 
			
		||||
            artixpkg_git_clone "${pkgbase}"
 | 
			
		||||
            artixpkg_git_clone "${OPTIONS[@]}" "${pkgbase}"
 | 
			
		||||
        elif (( config )); then
 | 
			
		||||
            artixpkg_git_config
 | 
			
		||||
            artixpkg_git_config "${OPTIONS[@]}"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
    done
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,6 @@
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_GIT_PULL_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_GIT_PULL_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/git/config.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/git/config.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -17,18 +14,17 @@ artixpkg_git_pull_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -m, --maintainer=NAME  Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME       Pull all packages of the named topic
 | 
			
		||||
        -j, --jobs N           Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --universe             Pull all existing packages
 | 
			
		||||
        --fetch                Fetch only
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
        -m, --maintainer=NAME      Pull all packages of the named maintainer
 | 
			
		||||
        -t, --topic=NAME           Pull all packages of the named topic
 | 
			
		||||
        -j, --jobs N               Run up to N jobs in parallel (default: $(nproc))
 | 
			
		||||
        --all                      Pull all existing packages
 | 
			
		||||
        -h, --help                 Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo linux libbar
 | 
			
		||||
        $ ${COMMAND} --maintainer maintainer-mynickname
 | 
			
		||||
        $ ${COMMAND} --topic myopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic myopic
 | 
			
		||||
        $ ${COMMAND} --maintainer tux
 | 
			
		||||
        $ ${COMMAND} --topic mytopic
 | 
			
		||||
        $ ${COMMAND} -j 8 --topic mytopic
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -42,7 +38,6 @@ artixpkg_git_pull() {
 | 
			
		||||
 | 
			
		||||
    # options
 | 
			
		||||
    local PULL_ALL=0
 | 
			
		||||
    local FETCH=0
 | 
			
		||||
    local MAINTAINER=
 | 
			
		||||
    local TOPIC=
 | 
			
		||||
    local CONFIGURE_OPTIONS=()
 | 
			
		||||
@@ -75,14 +70,10 @@ artixpkg_git_pull() {
 | 
			
		||||
                TOPIC="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --universe)
 | 
			
		||||
            --all)
 | 
			
		||||
                PULL_ALL=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --fetch)
 | 
			
		||||
                FETCH=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -j|--jobs)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                jobs=$2
 | 
			
		||||
@@ -104,24 +95,18 @@ artixpkg_git_pull() {
 | 
			
		||||
 | 
			
		||||
    # Query packages of a maintainer
 | 
			
		||||
    if [[ -n ${MAINTAINER} ]]; then
 | 
			
		||||
        stat_busy "Query mantainer packages"
 | 
			
		||||
            local maint
 | 
			
		||||
            maint="maintainer-${MAINTAINER}"
 | 
			
		||||
            mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        local maint
 | 
			
		||||
        maint="maintainer-${MAINTAINER}"
 | 
			
		||||
        mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ -n ${TOPIC} ]]; then
 | 
			
		||||
        stat_busy "Query topic packages"
 | 
			
		||||
            mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Query all released packages
 | 
			
		||||
    if (( PULL_ALL )); then
 | 
			
		||||
        stat_busy "Query all packages"
 | 
			
		||||
            mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
 | 
			
		||||
        stat_done
 | 
			
		||||
        mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort)
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # parallelization
 | 
			
		||||
@@ -140,17 +125,12 @@ artixpkg_git_pull() {
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
        if [[ -d ${pkgbase} ]]; then
 | 
			
		||||
            ( cd ${pkgbase} || return
 | 
			
		||||
                if (( FETCH )); then
 | 
			
		||||
                    msg "Fetching ${pkgbase} ..."
 | 
			
		||||
                    if ! git fetch origin; then
 | 
			
		||||
                        die 'failed to fetch %s' "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
                else
 | 
			
		||||
                    msg "Pulling ${pkgbase} ..."
 | 
			
		||||
                    if ! git pull origin master; then
 | 
			
		||||
                        die 'failed to pull %s' "${pkgbase}"
 | 
			
		||||
                    fi
 | 
			
		||||
 | 
			
		||||
                msg "Pulling ${pkgbase} ..."
 | 
			
		||||
                if ! git pull origin master; then
 | 
			
		||||
                    die 'failed to pull %s' "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
            )
 | 
			
		||||
        else
 | 
			
		||||
            warning "Skip pulling ${pkgbase}: Directory does not exist"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										128
									
								
								src/lib/pkg/git/push.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								src/lib/pkg/git/push.sh
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
@@ -11,17 +11,44 @@ source "${LIBDIR}"/pkg/db/db.sh
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
check_pkgbuild_validity() {
 | 
			
		||||
    # shellcheck source=contrib/makepkg/PKGBUILD.proto
 | 
			
		||||
    . ./PKGBUILD
 | 
			
		||||
 | 
			
		||||
    # skip when there are no sources available
 | 
			
		||||
    if (( ! ${#source[@]} )); then
 | 
			
		||||
        return
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # validate sources hash algo is at least > sha1
 | 
			
		||||
    local bad_algos=("cksums" "md5sums" "sha1sums")
 | 
			
		||||
    local good_hash_algo=false
 | 
			
		||||
 | 
			
		||||
    # from makepkg libmakepkg/util/schema.sh
 | 
			
		||||
    for integ in "${known_hash_algos[@]}"; do
 | 
			
		||||
        local sumname="${integ}sums"
 | 
			
		||||
        if [[ -n ${!sumname} ]] && ! in_array "${sumname}" "${bad_algos[@]}"; then
 | 
			
		||||
            good_hash_algo=true
 | 
			
		||||
            break
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if ! $good_hash_algo; then
 | 
			
		||||
        die "PKGBUILD lacks a secure cryptographic checksum, insecure algorithms: ${bad_algos[*]}"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_repo_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [COMMAND] [OPTIONS]
 | 
			
		||||
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        add          Add built pkgbase to repo
 | 
			
		||||
        move         Move built pkgbase between repos
 | 
			
		||||
        remove       Remove built pkgbase from repo
 | 
			
		||||
        import       Import latest tag from arch upstream
 | 
			
		||||
        show         Show the pkgbase's repo db
 | 
			
		||||
        add            Add built pkgbase to repo
 | 
			
		||||
        move           Move built pkgbase between repos
 | 
			
		||||
        remove         Remove built pkgbase from repo
 | 
			
		||||
        import         Import latest tag from arch upstream
 | 
			
		||||
        show           Show the pkgbase's repo db
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,6 @@
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_REPO_ADD_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_REPO_ADD_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/git.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/git.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -17,10 +14,10 @@ artixpkg_repo_add_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -p, --push         Push pkgbase
 | 
			
		||||
        -r, --rebuild      Triggers a rebuild
 | 
			
		||||
        -n, --nocheck      Disable the check function
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
        -p, --push             Push pkgbase
 | 
			
		||||
        -r, --rebuild          Triggers a rebuild
 | 
			
		||||
        -n, --nocheck          Disable the check function
 | 
			
		||||
        -h, --help             Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} world-gremlins libfoo
 | 
			
		||||
@@ -72,6 +69,7 @@ artixpkg_repo_add() {
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    DEST="$1"
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases+=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
@@ -88,10 +86,6 @@ artixpkg_repo_add() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
#                 if has_changeset; then
 | 
			
		||||
#                     die "Remote changes detected! Please pull (%s)" "${pkgbase}"
 | 
			
		||||
#                 fi
 | 
			
		||||
 | 
			
		||||
                if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                    die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 
 | 
			
		||||
@@ -17,19 +17,16 @@ patch_pkgbase(){
 | 
			
		||||
 | 
			
		||||
    case "${name}" in
 | 
			
		||||
        glibc)
 | 
			
		||||
            msg "Patching %s" "${name}"
 | 
			
		||||
            sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
 | 
			
		||||
                -e '/nscd.service/d' \
 | 
			
		||||
                -i "${pkgbuild}"
 | 
			
		||||
        ;;
 | 
			
		||||
        linux|linux-lts)
 | 
			
		||||
            msg "Patching %s" "${name}"
 | 
			
		||||
        linux|linux-lts|linux-zen|linux-hardened|linux-rt|linux-rt-lts)
 | 
			
		||||
            sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i "${pkgbuild}"
 | 
			
		||||
            sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
 | 
			
		||||
                -i config
 | 
			
		||||
        ;;
 | 
			
		||||
        gstreamer|gst-plugins-*|licenses)
 | 
			
		||||
            msg "Patching %s" "${name}"
 | 
			
		||||
            sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
 | 
			
		||||
                -e 's|(Arch Linux)|(Artix Linux)|' \
 | 
			
		||||
                -i "${pkgbuild}"
 | 
			
		||||
@@ -44,12 +41,14 @@ artixpkg_repo_import_usage() {
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        --switch TAG       Switch the current workspace to a specified version tag
 | 
			
		||||
        --tag TAG          Switch the current workspace to a specified version tag
 | 
			
		||||
        --del              Delete files before rsync import
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo
 | 
			
		||||
        $ ${COMMAND} libfoo --switch TAG
 | 
			
		||||
        $ ${COMMAND} --tag TAG libfoo
 | 
			
		||||
        $ ${COMMAND} --tag TAG --del libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -64,25 +63,44 @@ artixpkg_repo_import() {
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local TAG
 | 
			
		||||
    local rsync_args=()
 | 
			
		||||
    rsync_args+=(-aWxvci --progress --delete-before --no-R --no-implied-dirs)
 | 
			
		||||
    rsync_args+=(--exclude '.git'  --exclude 'Jenkinsfile' --exclude '.gitignore' --exclude 'README.md')
 | 
			
		||||
    rsync_args+=(
 | 
			
		||||
        -axcihW
 | 
			
		||||
        --no-R
 | 
			
		||||
        --no-implied-dirs
 | 
			
		||||
        --exclude '.artixlinux'
 | 
			
		||||
        --exclude '.git'
 | 
			
		||||
        --exclude '.gitignore'
 | 
			
		||||
        --exclude 'README.md'
 | 
			
		||||
        --exclude '*.service'
 | 
			
		||||
        --exclude '*.timer'
 | 
			
		||||
        --exclude '*.socket'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
        --switch=*)
 | 
			
		||||
            TAG="${1#*=}"
 | 
			
		||||
            shift
 | 
			
		||||
        ;;
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            artixpkg_repo_import_usage
 | 
			
		||||
            exit 0
 | 
			
		||||
        ;;
 | 
			
		||||
        -*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            break
 | 
			
		||||
        ;;
 | 
			
		||||
            --tag)
 | 
			
		||||
                (( $# <= 1 )) && die "missing argument for %s" "$1"
 | 
			
		||||
                TAG="$2"
 | 
			
		||||
                shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
            --tag=*)
 | 
			
		||||
                TAG="${1#*=}"
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            --del)
 | 
			
		||||
                rsync_args+=(--delete-before)
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_repo_import_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
            *)
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
@@ -98,10 +116,6 @@ artixpkg_repo_import() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
#                if has_changeset; then
 | 
			
		||||
#                     die "Remote changes detected! Please pull (%s)" "${pkgbase}"
 | 
			
		||||
#                 fi
 | 
			
		||||
 | 
			
		||||
                stat_busy "Checking for upstream url"
 | 
			
		||||
                if ! git config --local --get remote.upstream.url &>/dev/null; then
 | 
			
		||||
                    git remote add upstream "${GIT_UPSTREAM_URL}/${pkgbase}".git
 | 
			
		||||
@@ -129,11 +143,11 @@ artixpkg_repo_import() {
 | 
			
		||||
                git checkout master &>/dev/null
 | 
			
		||||
                git branch -D "${version}" &>/dev/null
 | 
			
		||||
 | 
			
		||||
                rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/ &>/dev/null
 | 
			
		||||
                stat_done
 | 
			
		||||
 | 
			
		||||
                rsync "${rsync_args[@]}" "${temp}"/ "$(pwd)"/ #&>/dev/null
 | 
			
		||||
 | 
			
		||||
                patch_pkgbase "${pkgbase}"
 | 
			
		||||
 | 
			
		||||
                stat_done
 | 
			
		||||
            )
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,6 @@
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_REPO_MOVE_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_REPO_MOVE_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/git.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/git.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -83,10 +80,6 @@ artixpkg_repo_move() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
#                 if has_changeset; then
 | 
			
		||||
#                     die "Remote changes detected! Please pull (%s)" "${pkgbase}"
 | 
			
		||||
#                 fi
 | 
			
		||||
 | 
			
		||||
                if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                    die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,6 @@
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_REPO_REMOVE_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_REPO_REMOVE_SH=1
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/pkg/db/git.sh
 | 
			
		||||
source "${LIBDIR}"/pkg/db/git.sh
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -59,6 +56,7 @@ artixpkg_repo_remove() {
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    DEST="$1"
 | 
			
		||||
    shift
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
 | 
			
		||||
@@ -75,10 +73,6 @@ artixpkg_repo_remove() {
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
#                 if has_changeset; then
 | 
			
		||||
#                     die "Remote changes detected! Please pull (%s)" "${pkgbase}"
 | 
			
		||||
#                 fi
 | 
			
		||||
 | 
			
		||||
                if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                    die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										115
									
								
								src/lib/pkg/repo/show.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								src/lib/pkg/repo/show.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
[[ -z ${ARTOOLS_INCLUDE_REPO_SHOW_SH:-} ]] || return 0
 | 
			
		||||
ARTOOLS_INCLUDE_REPO_SHOW_SH=1
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
has_changeset(){
 | 
			
		||||
    git fetch origin &>/dev/null
 | 
			
		||||
 | 
			
		||||
    if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then
 | 
			
		||||
        msg2 "changes: yes"
 | 
			
		||||
        git status -sb
 | 
			
		||||
        return 0
 | 
			
		||||
    fi
 | 
			
		||||
    msg2 "changes: no"
 | 
			
		||||
    return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_repo_show_usage() {
 | 
			
		||||
    local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
 | 
			
		||||
    cat <<- _EOF_
 | 
			
		||||
    Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -b, --base         Show srcinfo base
 | 
			
		||||
        -p, --pkgs         Show srcinfo pkgs
 | 
			
		||||
        -h, --help         Show this help text
 | 
			
		||||
 | 
			
		||||
    EXAMPLES
 | 
			
		||||
        $ ${COMMAND} libfoo
 | 
			
		||||
        $ ${COMMAND} -b libfoo
 | 
			
		||||
        $ ${COMMAND} -p libfoo
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
artixpkg_repo_show() {
 | 
			
		||||
    if (( $# < 1 )); then
 | 
			
		||||
        artixpkg_repo_show_usage
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # options
 | 
			
		||||
    local pkgbases=()
 | 
			
		||||
    local pkgbase
 | 
			
		||||
    local SRC_BASE=0
 | 
			
		||||
    local SRC_PKGS=0
 | 
			
		||||
 | 
			
		||||
    while (( $# )); do
 | 
			
		||||
        case $1 in
 | 
			
		||||
            -h|--help)
 | 
			
		||||
                artixpkg_repo_show_usage
 | 
			
		||||
                exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
            -b|--base)
 | 
			
		||||
                SRC_BASE=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -p|--pkgs)
 | 
			
		||||
                SRC_PKGS=1
 | 
			
		||||
                shift
 | 
			
		||||
            ;;
 | 
			
		||||
            -*)
 | 
			
		||||
                die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
            *)
 | 
			
		||||
                break
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    pkgbases=("$@")
 | 
			
		||||
 | 
			
		||||
    for pkgbase in "${pkgbases[@]}"; do
 | 
			
		||||
 | 
			
		||||
        if [[ -d "${pkgbase}" ]];then
 | 
			
		||||
 | 
			
		||||
            if [[ ! -d "${pkgbase}/.git" ]]; then
 | 
			
		||||
                error "Not a Git repository: ${pkgbase}"
 | 
			
		||||
                continue
 | 
			
		||||
            fi
 | 
			
		||||
            ( cd "${pkgbase}" || return
 | 
			
		||||
 | 
			
		||||
                msg "Checking origin for changes"
 | 
			
		||||
                if has_changeset; then
 | 
			
		||||
                    warning "Remote changes detected! Please update (%s)" "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
                    die "No PKGBUILD found in (%s)" "${pkgbase}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                msg "Querying ${pkgbase} ..."
 | 
			
		||||
                if ! show_db; then
 | 
			
		||||
                    warning "Could not query ${REPO_DB}"
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                if (( SRC_BASE )); then
 | 
			
		||||
                    msg "Showing srcinfo base ..."
 | 
			
		||||
                    show_srcinfo_base
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                if (( SRC_PKGS )); then
 | 
			
		||||
                    msg "Showing srcinfo pkgs ..."
 | 
			
		||||
                    show_srcinfo_pkgs
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
            )
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								src/lib/pkg/version/version.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/lib/pkg/version/version.sh
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
@@ -22,6 +22,8 @@ usage() {
 | 
			
		||||
    COMMANDS
 | 
			
		||||
        repo      Pacman database modification for packge update, move etc
 | 
			
		||||
        git       Manage Git packaging repositories and their configuration
 | 
			
		||||
        admin     Managegement of topics and obsolete repos
 | 
			
		||||
        version   Show artixpkg version information
 | 
			
		||||
 | 
			
		||||
    OPTIONS
 | 
			
		||||
        -h, --help     Show this help text
 | 
			
		||||
@@ -67,6 +69,22 @@ while (( $# )); do
 | 
			
		||||
        artixpkg_git "$@"
 | 
			
		||||
        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"
 | 
			
		||||
    ;;
 | 
			
		||||
 
 | 
			
		||||
@@ -16,22 +16,27 @@ source "${LIBDIR}"/base/chroot.sh
 | 
			
		||||
create_first=false
 | 
			
		||||
rebuild=false
 | 
			
		||||
 | 
			
		||||
mkchrootpkg_args=(-c -n)
 | 
			
		||||
mkchrootpkg_args=(-c)
 | 
			
		||||
 | 
			
		||||
cmd=${0##*/}
 | 
			
		||||
repo=${cmd#*-}
 | 
			
		||||
base_devel=('base-devel')
 | 
			
		||||
base_packages=('base-devel')
 | 
			
		||||
chroots_pkg="${CHROOTS_DIR}/buildpkg"
 | 
			
		||||
arch=$(uname -m)
 | 
			
		||||
 | 
			
		||||
arch=${ARCH}
 | 
			
		||||
repo=${REPO}
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    printf 'Usage: %s [options] -- [mkchrootpkg_args]\n' "${0##*/}"
 | 
			
		||||
    printf '    -r <dir>           Create chroots in this directory\n'
 | 
			
		||||
    printf '    -d <dir>           Destination repo chroot\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${chroots_pkg}"
 | 
			
		||||
    printf '    -d <dest>          Destination repo chroot\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${repo}"
 | 
			
		||||
    printf '    -a <arch>          Build arch chroot\n'
 | 
			
		||||
    printf '                       [default: %s]\n' "${arch}"
 | 
			
		||||
    printf '    -c                 Recreate the chroot before building\n'
 | 
			
		||||
    printf '    -m                 Major rebuild\n'
 | 
			
		||||
    printf '    -N                 Disable check() function\n'
 | 
			
		||||
    printf '    -C                 Run checkpkg after built\n'
 | 
			
		||||
    printf '    -C                 Run checkpkg after build\n'
 | 
			
		||||
    printf '    -n                 Run namcap after build\n'
 | 
			
		||||
    printf '    -h                 This help\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    printf 'Default mkchrootpkg_args args: %s\n' "${mkchrootpkg_args[*]}"
 | 
			
		||||
@@ -39,35 +44,41 @@ usage() {
 | 
			
		||||
    exit "$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opts='hcCNmr:d:'
 | 
			
		||||
opts='hcCNmnr:d:a:'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "${arg}" in
 | 
			
		||||
        r) chroots_pkg="$OPTARG" ;;
 | 
			
		||||
        d) repo="$OPTARG" ;;
 | 
			
		||||
        a) arch="$OPTARG" ;;
 | 
			
		||||
        c) create_first=true ;;
 | 
			
		||||
        m) rebuild=true ;;
 | 
			
		||||
        m) rebuild=true; repo=${repo%-*} ;;
 | 
			
		||||
        C) mkchrootpkg_args+=(-C) ;;
 | 
			
		||||
        N) mkchrootpkg_args+=(-N) ;;
 | 
			
		||||
        n) mkchrootpkg_args+=(-n) ;;
 | 
			
		||||
        h|?) usage 0 ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if ${rebuild};then
 | 
			
		||||
    repo='default'
 | 
			
		||||
else
 | 
			
		||||
    case ${repo} in
 | 
			
		||||
        system|world|galaxy) repo='default' ;;
 | 
			
		||||
        lib32*) base_devel+=('multilib-devel') ;;
 | 
			
		||||
        *-gremlins|*-goblins) repo=${repo#*-} ;;
 | 
			
		||||
    esac
 | 
			
		||||
if [[ "${repo}" == lib32* ]]; then
 | 
			
		||||
    base_packages+=('multilib-devel')
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf"
 | 
			
		||||
[[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf"
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
makepkg_conf="${DATADIR}/makepkg.conf.d/${arch}.conf"
 | 
			
		||||
[[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf"
 | 
			
		||||
if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]]; then
 | 
			
		||||
    makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf"
 | 
			
		||||
fi
 | 
			
		||||
if [[ -f ${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then
 | 
			
		||||
    makepkg_conf="${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf"
 | 
			
		||||
    if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then
 | 
			
		||||
        makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ -f "${DATADIR}/setarch-aliases.d/${arch}" ]]; then
 | 
			
		||||
    read -r set_arch < "${DATADIR}/setarch-aliases.d/${arch}"
 | 
			
		||||
@@ -76,19 +87,19 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Architecture-specific Mount
 | 
			
		||||
# arch_mounts=()
 | 
			
		||||
# if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then
 | 
			
		||||
#     mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}"
 | 
			
		||||
# fi
 | 
			
		||||
# for arch_mount in "${arch_mounts[@]}"; do
 | 
			
		||||
#     if [[ $arch_mount = rw* ]]; then
 | 
			
		||||
#         arch_mount=${arch_mount#rw }
 | 
			
		||||
#         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-d" "$arch_mount")
 | 
			
		||||
#     elif [[ $arch_mount = ro* ]]; then
 | 
			
		||||
#         arch_mount=${arch_mount#ro }
 | 
			
		||||
#         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-D" "$arch_mount")
 | 
			
		||||
#     fi
 | 
			
		||||
# done
 | 
			
		||||
arch_mounts=()
 | 
			
		||||
if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then
 | 
			
		||||
    mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}"
 | 
			
		||||
fi
 | 
			
		||||
for arch_mount in "${arch_mounts[@]}"; do
 | 
			
		||||
    if [[ $arch_mount = rw* ]]; then
 | 
			
		||||
        arch_mount=${arch_mount#rw }
 | 
			
		||||
        in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-B:$arch_mount")
 | 
			
		||||
    elif [[ $arch_mount = ro* ]]; then
 | 
			
		||||
        arch_mount=${arch_mount#ro }
 | 
			
		||||
        in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-Br:$arch_mount")
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME "${BASH_SOURCE[0]}" "$@"
 | 
			
		||||
 | 
			
		||||
@@ -114,7 +125,7 @@ if ${create_first} || [[ ! -d "${chroots_pkg}/${repo}-${arch}" ]];then
 | 
			
		||||
        -C "${pacman_conf}" \
 | 
			
		||||
        -M "${makepkg_conf}" \
 | 
			
		||||
        "${chroots_pkg}/${repo}-${arch}/root" \
 | 
			
		||||
        "${base_devel[@]}" || abort
 | 
			
		||||
        "${base_packages[@]}" || abort
 | 
			
		||||
else
 | 
			
		||||
    lock 9 "${chroots_pkg}/${repo}-${arch}/root.lock" "Locking clean chroot"
 | 
			
		||||
    chroot-run \
 | 
			
		||||
 
 | 
			
		||||
@@ -23,41 +23,66 @@ usage() {
 | 
			
		||||
        list for both packages and a library list for both packages.
 | 
			
		||||
 | 
			
		||||
        OPTIONS
 | 
			
		||||
            -r, --rmdir     Remove the temporary directory
 | 
			
		||||
            -w, --warn      Print a warning in case of differences
 | 
			
		||||
            -h, --help      Show this help text
 | 
			
		||||
            -r, --rmdir          Remove the temporary directory
 | 
			
		||||
            -w, --warn           Print a warning in case of differences
 | 
			
		||||
            -M, --makepkg-config Set an alternate makepkg configuration file
 | 
			
		||||
            -h, --help           Show this help text
 | 
			
		||||
_EOF_
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RMDIR=0
 | 
			
		||||
WARN=0
 | 
			
		||||
MAKEPKG_CONF=/etc/makepkg.conf
 | 
			
		||||
 | 
			
		||||
OPT_SHORT='rwh'
 | 
			
		||||
OPT_LONG=('rmdir' 'warn' 'help')
 | 
			
		||||
if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
set  -- "${OPTRET[@]}"
 | 
			
		||||
 | 
			
		||||
while :; do
 | 
			
		||||
# option checking
 | 
			
		||||
while (( $# )); do
 | 
			
		||||
    case $1 in
 | 
			
		||||
        -r|--rmdir)
 | 
			
		||||
            RMDIR=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -w|--warn)
 | 
			
		||||
            WARN=1
 | 
			
		||||
            ;;
 | 
			
		||||
        -h|--help)
 | 
			
		||||
            usage
 | 
			
		||||
            exit 0
 | 
			
		||||
            ;;
 | 
			
		||||
        -r|--rmdir)
 | 
			
		||||
            RMDIR=1
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -w|--warn)
 | 
			
		||||
            WARN=1
 | 
			
		||||
            shift
 | 
			
		||||
            ;;
 | 
			
		||||
        -M|--makepkg-config)
 | 
			
		||||
            MAKEPKG_CONF="$2"
 | 
			
		||||
            shift 2
 | 
			
		||||
            ;;
 | 
			
		||||
        --)
 | 
			
		||||
            shift; break
 | 
			
		||||
            shift
 | 
			
		||||
            break
 | 
			
		||||
            ;;
 | 
			
		||||
        -*|--*)
 | 
			
		||||
            die "invalid argument: %s" "$1"
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
            break
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
    shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Source makepkg.conf; fail if it is not found
 | 
			
		||||
if [[ -r "${MAKEPKG_CONF}" ]]; then
 | 
			
		||||
    # shellcheck source=config/makepkg/x86_64.conf
 | 
			
		||||
    source "${MAKEPKG_CONF}"
 | 
			
		||||
else
 | 
			
		||||
    die "${MAKEPKG_CONF} not found!"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Source user-specific makepkg.conf overrides
 | 
			
		||||
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then
 | 
			
		||||
    # shellcheck source=/dev/null
 | 
			
		||||
    source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf"
 | 
			
		||||
elif [[ -r "$HOME/.makepkg.conf" ]]; then
 | 
			
		||||
    # shellcheck source=/dev/null
 | 
			
		||||
    source "$HOME/.makepkg.conf"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [[ ! -f PKGBUILD ]]; then
 | 
			
		||||
    die 'This must be run in the directory of a built package.'
 | 
			
		||||
fi
 | 
			
		||||
@@ -72,6 +97,8 @@ STARTDIR=$(pwd)
 | 
			
		||||
(( RMDIR )) && trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT
 | 
			
		||||
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
 | 
			
		||||
 | 
			
		||||
changed=0
 | 
			
		||||
 | 
			
		||||
for _pkgname in "${pkgname[@]}"; do
 | 
			
		||||
    comparepkg=$_pkgname
 | 
			
		||||
    pkgurl=
 | 
			
		||||
@@ -84,8 +111,10 @@ for _pkgname in "${pkgname[@]}"; do
 | 
			
		||||
 | 
			
		||||
    if (( $# )); then
 | 
			
		||||
        case $1 in
 | 
			
		||||
            *://*)
 | 
			
		||||
                pkgurl=$1 ;;
 | 
			
		||||
            /*|*/*)
 | 
			
		||||
                pkgurl=file://$(readlink -m "$1") ;;
 | 
			
		||||
                pkgurl=$(readlink -m "$1") ;;
 | 
			
		||||
            *.pkg.tar*)
 | 
			
		||||
                pkgurl=$1 ;;
 | 
			
		||||
            '')
 | 
			
		||||
@@ -124,10 +153,16 @@ for _pkgname in "${pkgname[@]}"; do
 | 
			
		||||
    if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then
 | 
			
		||||
        message="Sonames differ in $_pkgname!"
 | 
			
		||||
        (( WARN )) && warning "$message" || msg "$message"
 | 
			
		||||
        printf "%s\n" "$diff_output"
 | 
			
		||||
        printf "%s\n" "$diff_output" 2>&1 | tee "${pkgfile##*/}-checkpkg.log"
 | 
			
		||||
        changed=1
 | 
			
		||||
    else
 | 
			
		||||
        msg "No soname differences for %s." "$_pkgname"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
(( RMDIR )) || msg "Files saved to %s" "$TEMPDIR"
 | 
			
		||||
if ! (( RMDIR )); then
 | 
			
		||||
    msg "Files saved to %s" "$TEMPDIR"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit "$changed"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								src/pkg/ckchrootpkg.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/pkg/ckchrootpkg.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
 | 
			
		||||
LIBDIR=${LIBDIR:-'@libdir@'}
 | 
			
		||||
 | 
			
		||||
# shellcheck source=src/lib/base/util.sh
 | 
			
		||||
source "${LIBDIR}"/base/util.sh
 | 
			
		||||
# shellcheck source=src/lib/base/message.sh
 | 
			
		||||
source "${LIBDIR}"/base/message.sh
 | 
			
		||||
# shellcheck source=src/lib/base/chroot.sh
 | 
			
		||||
source "${LIBDIR}"/base/chroot.sh
 | 
			
		||||
 | 
			
		||||
shopt -s nullglob
 | 
			
		||||
 | 
			
		||||
chrootdir=
 | 
			
		||||
makepkg_user=
 | 
			
		||||
passeddir="${CHROOTS_DIR}/buildpkg"
 | 
			
		||||
 | 
			
		||||
arch=${ARCH}
 | 
			
		||||
repo=${REPO}
 | 
			
		||||
 | 
			
		||||
copy=$USER
 | 
			
		||||
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
 | 
			
		||||
[[ -z "$copy" || $copy = root ]] && copy=copy
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
    printf 'Usage: %s [options] -r <chrootdir>\n' "${0##*/}"
 | 
			
		||||
    printf '    -r <dir>           Create chroots in this directory\n'
 | 
			
		||||
    printf '                       Default: %s\n' "${passeddir}"
 | 
			
		||||
    printf '    -d <dest>          Destination repo chroot\n'
 | 
			
		||||
    printf '                       Default: %s\n' "${repo}"
 | 
			
		||||
    printf '    -a <arch>          Build arch chroot\n'
 | 
			
		||||
    printf '                       Default: %s\n' "${arch}"
 | 
			
		||||
    printf '    -l <copy>          The directory to use as the working copy of the chroot\n'
 | 
			
		||||
    printf '                       Useful for maintaining multiple copies\n'
 | 
			
		||||
    printf '                       Default: %s\n' "$copy"
 | 
			
		||||
    printf '    -U                 Run makepkg as a specified user\n'
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opts='hr:l:U:d:a:'
 | 
			
		||||
 | 
			
		||||
while getopts "${opts}" arg; do
 | 
			
		||||
    case "$arg" in
 | 
			
		||||
        r) passeddir="$OPTARG" ;;
 | 
			
		||||
        l) copy="$OPTARG" ;;
 | 
			
		||||
        U) makepkg_user="$OPTARG" ;;
 | 
			
		||||
        d) repo="$OPTARG" ;;
 | 
			
		||||
        a) arch="$OPTARG" ;;
 | 
			
		||||
        h|*) usage ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
[[ ! -f PKGBUILD ]] && die 'This must be run in a directory containing a PKGBUILD.'
 | 
			
		||||
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
 | 
			
		||||
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
 | 
			
		||||
 | 
			
		||||
check_root "" "${BASH_SOURCE[0]}" "$@"
 | 
			
		||||
 | 
			
		||||
# # Canonicalize chrootdir, getting rid of trailing /
 | 
			
		||||
chrootdir=$(readlink -e "$passeddir")
 | 
			
		||||
 | 
			
		||||
chrootdir="$chrootdir"/"${repo}-${arch}"
 | 
			
		||||
 | 
			
		||||
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
 | 
			
		||||
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
 | 
			
		||||
 | 
			
		||||
if [[ ${copy:0:1} = / ]]; then
 | 
			
		||||
    copydir=$copy
 | 
			
		||||
else
 | 
			
		||||
    copydir="$chrootdir/$copy"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
umask 0022
 | 
			
		||||
 | 
			
		||||
ORIG_HOME=$HOME
 | 
			
		||||
IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}")
 | 
			
		||||
load_makepkg_config
 | 
			
		||||
HOME=$ORIG_HOME
 | 
			
		||||
 | 
			
		||||
[[ -d $PKGDEST ]]    || PKGDEST=$PWD
 | 
			
		||||
[[ -d $SRCDEST ]]    || SRCDEST=$PWD
 | 
			
		||||
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
 | 
			
		||||
[[ -d $LOGDEST ]]    || LOGDEST=$PWD
 | 
			
		||||
 | 
			
		||||
msg "Running checkpkg"
 | 
			
		||||
mapfile -t pkgnames < <(bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"')
 | 
			
		||||
 | 
			
		||||
mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \
 | 
			
		||||
    --dbpath "$copydir"/var/lib/pacman \
 | 
			
		||||
    -Sddp "${pkgnames[@]}")
 | 
			
		||||
 | 
			
		||||
if ! wait $!; then
 | 
			
		||||
    warning "Skipped checkpkg due to missing repo packages"
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# download package files if any non-local location exists
 | 
			
		||||
for remotepkg in "${remotepkgs[@]}"; do
 | 
			
		||||
    if [[ $remotepkg != file://* ]]; then
 | 
			
		||||
        msg2 "Downloading current versions"
 | 
			
		||||
        chroot-run "$copydir" pacman --noconfirm -Swdd "${pkgnames[@]}"
 | 
			
		||||
        mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \
 | 
			
		||||
            --dbpath "$copydir"/var/lib/pacman \
 | 
			
		||||
            -Sddp "${pkgnames[@]}")
 | 
			
		||||
        break
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}"
 | 
			
		||||
@@ -29,6 +29,7 @@ clean_first=0
 | 
			
		||||
run_namcap=0
 | 
			
		||||
run_checkpkg=0
 | 
			
		||||
temp_chroot=0
 | 
			
		||||
tmp_opts="nosuid,nodev,size=50%,nr_inodes=2m"
 | 
			
		||||
 | 
			
		||||
bindmounts=''
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +48,7 @@ usage() {
 | 
			
		||||
    printf ' <chrootdir>/{root, copy} but only "root" is required\n'
 | 
			
		||||
    printf ' by default. The working copy will be created as needed\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
    printf "The chroot 'root' directory must be created via the following\n"
 | 
			
		||||
    printf 'The chroot "root" directory must be created via the following\n'
 | 
			
		||||
    printf 'command:\n'
 | 
			
		||||
    printf '    mkchroot <chrootdir>/root base-devel\n'
 | 
			
		||||
    printf '\n'
 | 
			
		||||
@@ -60,26 +61,24 @@ usage() {
 | 
			
		||||
    printf 'Flags:\n'
 | 
			
		||||
    printf ' -h         This help\n'
 | 
			
		||||
    printf ' -c         Clean the chroot before building\n'
 | 
			
		||||
    printf ' -d <dir>   Bind directory into build chroot as read-write\n'
 | 
			
		||||
    printf ' -D <dir>   Bind directory into build chroot as read-only\n'
 | 
			
		||||
    printf ' -b <arg>   Bind mount directory/file into build chroot\n'
 | 
			
		||||
    printf ' -u         Update the working copy of the chroot before building\n'
 | 
			
		||||
    printf '           This is useful for rebuilds without dirtying the pristine\n'
 | 
			
		||||
    printf '           chroot\n'
 | 
			
		||||
    printf '            This is useful for rebuilds without dirtying the pristine\n'
 | 
			
		||||
    printf '            chroot\n'
 | 
			
		||||
    printf ' -r <dir>   The chroot dir to use\n'
 | 
			
		||||
    printf ' -I <pkg>   Install a package into the working copy of the chroot\n'
 | 
			
		||||
    printf ' -l <copy>  The directory to use as the working copy of the chroot\n'
 | 
			
		||||
    printf '            Useful for maintaining multiple copies\n'
 | 
			
		||||
    printf '            Default: %s\n' "$copy"
 | 
			
		||||
    printf ' -n         Run namcap on the package\n'
 | 
			
		||||
    printf ' -C         Run checkpkg on the package\n'
 | 
			
		||||
    printf ' -N         Disable check() function\n'
 | 
			
		||||
    printf ' -C         Run checkpkg on the package\n'
 | 
			
		||||
    printf ' -T         Build in a temporary directory\n'
 | 
			
		||||
    printf ' -U         Run makepkg as a specified user\n'
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# {{{ functions
 | 
			
		||||
 | 
			
		||||
# Usage: sync_chroot $chrootdir $copydir [$copy]
 | 
			
		||||
sync_chroot() {
 | 
			
		||||
    local chrootdir=$1
 | 
			
		||||
@@ -142,9 +141,7 @@ install_packages() {
 | 
			
		||||
    pkgnames=("${install_pkgs[@]##*/}")
 | 
			
		||||
 | 
			
		||||
    cp -- "${install_pkgs[@]}" "$copydir/root/"
 | 
			
		||||
    chroot-run \
 | 
			
		||||
        -b "${bindmounts}" \
 | 
			
		||||
        "$copydir" \
 | 
			
		||||
    chroot-run -b "${bindmounts}" "$copydir" \
 | 
			
		||||
        bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
 | 
			
		||||
    ret=$?
 | 
			
		||||
    rm -- "${pkgnames[@]/#/$copydir/root/}"
 | 
			
		||||
@@ -354,13 +351,11 @@ if [[ ! -d $copydir ]] || (( clean_first )); then
 | 
			
		||||
    sync_chroot "$chrootdir" "$copydir" "$copy"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(( update_first )) && chroot-run \
 | 
			
		||||
        -b "${bindmounts}" \
 | 
			
		||||
        "$copydir" \
 | 
			
		||||
        pacman -Syuu --noconfirm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ -n ${install_pkgs[*]:-} ]]; then
 | 
			
		||||
    install_packages
 | 
			
		||||
    ret=$?
 | 
			
		||||
@@ -378,6 +373,7 @@ download_sources
 | 
			
		||||
prepare_chroot
 | 
			
		||||
 | 
			
		||||
if chroot-run \
 | 
			
		||||
    -t "${tmp_opts}" \
 | 
			
		||||
    -b "${bindmounts} -B:${PWD}:/startdir -B:${SRCDEST}:/srcdest" \
 | 
			
		||||
    "$copydir" \
 | 
			
		||||
    /chrootbuild "${makepkg_args[@]}"
 | 
			
		||||
@@ -409,6 +405,7 @@ else
 | 
			
		||||
            warning "Skipped checkpkg due to missing repo packages"
 | 
			
		||||
            exit 0
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        # download package files if any non-local location exists
 | 
			
		||||
        for remotepkg in "${remotepkgs[@]}"; do
 | 
			
		||||
            if [[ $remotepkg != file://* ]]; then
 | 
			
		||||
@@ -420,8 +417,9 @@ else
 | 
			
		||||
                break
 | 
			
		||||
            fi
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        msg2 "Checking packages"
 | 
			
		||||
        sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}"
 | 
			
		||||
        sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}"
 | 
			
		||||
    fi
 | 
			
		||||
    true
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ pkgbuild_extract_to_yaml() {
 | 
			
		||||
 | 
			
		||||
    if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
 | 
			
		||||
        [[ -z $pkgname ]] && srcyaml_write_attr 2 4 2 "$attrname" "${outvalue[@]}"
 | 
			
		||||
        [[ -n $pkgname ]] && srcyaml_write_attr 6 8 4 "$attrname" "${outvalue[@]}"
 | 
			
		||||
        [[ -n $pkgname ]] && srcyaml_write_attr 4 6 2 "$attrname" "${outvalue[@]}"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -82,12 +82,8 @@ yaml_write_global() {
 | 
			
		||||
                        noextract options backup
 | 
			
		||||
                        source validpgpkeys "${known_hash_algos[@]/%/sums}")
 | 
			
		||||
 | 
			
		||||
    local version
 | 
			
		||||
    version=$(get_full_version)
 | 
			
		||||
 | 
			
		||||
    Yaml+=$(write_yaml_map 0 "pkgbase")
 | 
			
		||||
    Yaml+=$(write_yaml_map 2 "name" "${pkgbase:-${pkgname}}")
 | 
			
		||||
    Yaml+=$(write_yaml_map 2 "version" "${version}")
 | 
			
		||||
 | 
			
		||||
    srcyaml_write_section_details ""
 | 
			
		||||
}
 | 
			
		||||
@@ -97,9 +93,9 @@ yaml_write_package() {
 | 
			
		||||
    local multivalued=(arch groups license checkdepends depends optdepends
 | 
			
		||||
                       provides conflicts replaces options backup)
 | 
			
		||||
 | 
			
		||||
    Yaml+=$(write_yaml_map 2 "packages")
 | 
			
		||||
    Yaml+=$(write_yaml_map 0 "pkgnames")
 | 
			
		||||
    for pkg in "${pkgname[@]}"; do
 | 
			
		||||
        Yaml+=$(write_yaml_seq_map 4 "pkgname" "$pkg")
 | 
			
		||||
        Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg")
 | 
			
		||||
        srcyaml_write_section_details "$pkg"
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
@@ -108,6 +104,11 @@ write_srcyaml() {
 | 
			
		||||
    Yaml=$(write_yaml_header)
 | 
			
		||||
    yaml_write_global
 | 
			
		||||
    yaml_write_package
 | 
			
		||||
 | 
			
		||||
#     local version
 | 
			
		||||
#     version=$(get_full_version)
 | 
			
		||||
#     Yaml+=$(write_yaml_map 2 "version" "${version}")
 | 
			
		||||
 | 
			
		||||
    printf '%s\n' "${Yaml}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,5 +36,10 @@ for pkg in "${passfiles[@]}"; do
 | 
			
		||||
        msg2 "Found: %s" "${pkgfile}"
 | 
			
		||||
        [[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig
 | 
			
		||||
        sign_pkg "${pkgfile}"
 | 
			
		||||
        ret=0
 | 
			
		||||
    else
 | 
			
		||||
        ret=1
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit "$ret"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user