forked from artix/artools
		
	Compare commits
	
		
			29 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | 
							
								
								
									
										37
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								Makefile
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ SHELL=/bin/bash | ||||
| V=0.31 | ||||
| BUILDTOOLVER ?= $(V) | ||||
|  | ||||
| CHROOTVER=0.11 | ||||
| CHROOTVER=0.12 | ||||
|  | ||||
| TOOLS = artools | ||||
| SYSCONFDIR = /etc | ||||
| @@ -37,22 +37,26 @@ TOOLS_CONFIGS_PKG=$(wildcard config/conf/*pkg*) | ||||
| TOOLS_CONFIGS_ISO=$(wildcard config/conf/*iso*) | ||||
|  | ||||
| LN_BUILDPKG = \ | ||||
| 	buildpkg-system \ | ||||
| 	buildpkg-system-gremlins \ | ||||
| 	buildpkg-system-goblins \ | ||||
| 	buildpkg-world \ | ||||
| 	buildpkg-world-gremlins \ | ||||
| 	buildpkg-world-goblins \ | ||||
| 	buildpkg-lib32 \ | ||||
| 	buildpkg-lib32-gremlins \ | ||||
| 	buildpkg-lib32-goblins \ | ||||
| 	buildpkg-galaxy \ | ||||
| 	buildpkg-galaxy-gremlins \ | ||||
| 	buildpkg-galaxy-goblins | ||||
| 	buildpkg-system-x86_64 \ | ||||
| 	buildpkg-system-gremlins-x86_64 \ | ||||
| 	buildpkg-system-goblins-x86_64 \ | ||||
| 	buildpkg-world-x86_64 \ | ||||
| 	buildpkg-world-gremlins-x86_64 \ | ||||
| 	buildpkg-world-goblins-x86_64 \ | ||||
| 	buildpkg-lib32-x86_64 \ | ||||
| 	buildpkg-lib32-gremlins-x86_64 \ | ||||
| 	buildpkg-lib32-goblins-x86_64 \ | ||||
| 	buildpkg-galaxy-x86_64 \ | ||||
| 	buildpkg-galaxy-gremlins-x86_64 \ | ||||
| 	buildpkg-galaxy-goblins-x86_64 | ||||
|  | ||||
| LN_BUILDISO = \ | ||||
| 	buildiso-gremlins \ | ||||
| 	buildiso-goblins | ||||
| 	buildiso-world \ | ||||
| 	buildiso-world-gremlins \ | ||||
| 	buildiso-world-goblins \ | ||||
| 	buildiso-galaxy \ | ||||
| 	buildiso-galaxy-gremlins \ | ||||
| 	buildiso-galaxy-goblins | ||||
|  | ||||
| all: binprogs_base binprogs_pkg binprogs_iso library_base library_pkg library_iso conf_base conf_pkg conf_iso | ||||
| binprogs_base: $(BINPROGS_BASE) | ||||
| @@ -133,6 +137,9 @@ install_pkg: binprogs_pkg | ||||
| 	for l in $(LN_BUILDPKG); do ln -sf buildpkg $(DESTDIR)$(PREFIX)/bin/$$l; done | ||||
| 	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides | ||||
|  | ||||
| 	# compat symlink | ||||
| 	ln -sf repopkg $(DESTDIR)$(PREFIX)/bin/deploypkg | ||||
|  | ||||
| install_iso: binprogs_iso | ||||
| 	install -dm0755 $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) | ||||
| 	install -dm0755 $(DESTDIR)$(PREFIX)/bin | ||||
|   | ||||
| @@ -88,15 +88,6 @@ Include = /etc/pacman.d/mirrorlist | ||||
| [world] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-goblins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy-gremlins] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| [galaxy] | ||||
| Include = /etc/pacman.d/mirrorlist | ||||
|  | ||||
| # If you want to run 32 bit applications on your x86_64 system, | ||||
| # enable the lib32 repositories as required here. | ||||
|  | ||||
|   | ||||
| @@ -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. | ||||
|  | ||||
|   | ||||
| @@ -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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								config/pacman/system-goblins.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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/system-gremlins.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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/system.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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								config/pacman/world-goblins.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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/world-gremlins.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.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								config/pacman/world.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,10 +197,6 @@ gen_iso_fn(){ | ||||
| prepare_build(){ | ||||
|     load_profile | ||||
|  | ||||
|     case "${repo}" in | ||||
|         buildiso) repo=default ;; | ||||
|     esac | ||||
|  | ||||
|     pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf" | ||||
|     [[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" | ||||
|  | ||||
| @@ -328,7 +324,7 @@ boot_only=false | ||||
| basestrap_args=(-GMc) | ||||
| cmd=${0##*/} | ||||
|  | ||||
| repo=${cmd##*-} | ||||
| repo=${cmd#buildiso-} | ||||
| owner=${SUDO_USER:-$USER} | ||||
| profile='base' | ||||
| chroots_iso="${CHROOTS_DIR}/buildiso" | ||||
|   | ||||
| @@ -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() { | ||||
|   | ||||
| @@ -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 "$@" | ||||
| } | ||||
| @@ -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 | ||||
|  | ||||
| @@ -135,13 +137,14 @@ update_yaml_base() { | ||||
|     local name | ||||
|     local pkgnames | ||||
|     local arches | ||||
|     local pkgbase | ||||
|  | ||||
|     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) | | ||||
|   | ||||
| @@ -1,79 +0,0 @@ | ||||
| #!/hint/bash | ||||
| # | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| declare -rA REPO_MAP=( | ||||
|     [core-rebuild]=system-goblins | ||||
|     [core-staging]=system-goblins | ||||
|     [core-testing]=system-gremlins | ||||
|     [core]=system | ||||
|     [extra-rebuild]=world-goblins | ||||
|     [extra-staging]=world-goblins | ||||
|     [extra-testing]=world-gremlins | ||||
|     [extra]=world | ||||
|     [multilib-staging]=lib32-goblins | ||||
|     [multilib-testing]=lib32-gremlins | ||||
|     [multilib]=lib32 | ||||
|     [community-staging]=galaxy-goblins | ||||
|     [community-testing]=galaxy-gremlins | ||||
|     [community]=galaxy | ||||
| ) | ||||
|  | ||||
| update_gitignore() { | ||||
|     { | ||||
|     printf '*.service\n' | ||||
|     printf '*.timer\n' | ||||
|     printf '*.socket\n' | ||||
|     } >> .gitignore | ||||
| } | ||||
|  | ||||
| migrate_to_yaml() { | ||||
|     if [[ -f trunk/PKGBUILD ]]; then | ||||
|         cp -r trunk/* ./ | ||||
|         stat_busy "Migrating ${pkgbase} to new layout" | ||||
|         create_repo_db | ||||
|         stat_done | ||||
|         # shellcheck source=contrib/makepkg/PKGBUILD.proto | ||||
|         source "trunk/PKGBUILD" | ||||
|         update_yaml_base | ||||
|  | ||||
|         if [[ -d x86_64 ]]; then | ||||
|             local repos | ||||
|             mapfile -t repos < <(ls x86_64) | ||||
|             for r in "${repos[@]}"; do | ||||
|                 # shellcheck source=contrib/makepkg/PKGBUILD.proto | ||||
|                 source "x86_64/${r}/PKGBUILD" | ||||
|  | ||||
|                 local repo | ||||
|                 local pkgs | ||||
|                 local version | ||||
|                 local pkgfiles | ||||
|  | ||||
|                 mapfile -t pkgfiles < <(print_package_names) | ||||
|  | ||||
|                 pkgs=$(yaml_array "${pkgfiles[@]}") | ||||
|  | ||||
|                 version=$(get_full_version) | ||||
|  | ||||
|                 repo=".repos.${REPO_MAP[$r]}" | ||||
|  | ||||
|                 version="${version}" pkgs="${pkgs}" repo="${repo}" \ | ||||
|                     yq -P 'with( | ||||
|                             eval(strenv(repo)); | ||||
|                                 .version = env(version) | | ||||
|                                 .packages = env(pkgs) )' \ | ||||
|                         -i "${REPO_DB}" | ||||
|             done | ||||
|             git rm -r x86_64 | ||||
|         fi | ||||
|         git rm -r trunk | ||||
|         if [[ -f .artixlinux/agent.yaml ]]; then | ||||
|             git rm .artixlinux/agent.yaml | ||||
|         fi | ||||
|         if [[ -f .gitignore ]]; then | ||||
|             update_gitignore | ||||
|         fi | ||||
|         git add . | ||||
|         git commit -m "migrate to new layout" | ||||
|     fi | ||||
| } | ||||
| @@ -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,16 @@ 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 | ||||
|         -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 +90,7 @@ artixpkg_git_clone() { | ||||
|                 TOPIC="${1#*=}" | ||||
|                 shift | ||||
|             ;; | ||||
|             --universe) | ||||
|             --all) | ||||
|                 CLONE_ALL=1 | ||||
|                 shift | ||||
|             ;; | ||||
| @@ -115,24 +115,18 @@ artixpkg_git_clone() { | ||||
|  | ||||
|     # Query packages of a maintainer | ||||
|     if [[ -n ${MAINTAINER} ]]; then | ||||
|         stat_busy "Query mantainer packages" | ||||
|             local maint | ||||
|             maint="maintainer-${MAINTAINER}" | ||||
|             mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort) | ||||
|         stat_done | ||||
|         local maint | ||||
|         maint="maintainer-${MAINTAINER}" | ||||
|         mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort) | ||||
|     fi | ||||
|  | ||||
|     if [[ -n ${TOPIC} ]]; then | ||||
|         stat_busy "Query topic packages" | ||||
|             mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort) | ||||
|         stat_done | ||||
|         mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort) | ||||
|     fi | ||||
|  | ||||
|     # Query all released packages | ||||
|     if (( CLONE_ALL )); then | ||||
|         stat_busy "Query all packages" | ||||
|             mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort) | ||||
|         stat_done | ||||
|         mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort) | ||||
|     fi | ||||
|  | ||||
|     # parallelization | ||||
|   | ||||
| @@ -7,22 +7,19 @@ ARTOOLS_INCLUDE_GIT_CONFIG_SH=1 | ||||
|  | ||||
| # shellcheck source=src/lib/pkg/db/db.sh | ||||
| source "${LIBDIR}"/pkg/db/db.sh | ||||
| # shellcheck source=src/lib/pkg/db/migrate.sh | ||||
| source "${LIBDIR}"/pkg/db/migrate.sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
|  | ||||
| commit_ci(){ | ||||
|     local ci=Jenkinsfile | ||||
|  | ||||
|     printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${ci}" | ||||
|     [[ -d .artixlinux ]] || mkdir .artixlinux | ||||
|     printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}" | ||||
|     { | ||||
|     printf '\n' | ||||
|     printf 'PackagePipeline(new RepoPackage(this))\n' | ||||
|     } >> "${ci}" | ||||
|     } >> "${REPO_CI}" | ||||
|  | ||||
|     git add "${ci}" | ||||
|     git add "${REPO_CI}" | ||||
|     git commit -m "initial ci commit" | ||||
| } | ||||
|  | ||||
| @@ -32,15 +29,15 @@ artixpkg_git_config_usage() { | ||||
|     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 | ||||
|         --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_ | ||||
| } | ||||
| @@ -117,7 +114,7 @@ artixpkg_git_config() { | ||||
|             artixpkg_git_config_usage | ||||
|             exit 0 | ||||
|         ;; | ||||
|         -t|--topic) | ||||
|         -m|--maintainer) | ||||
|             SET_TOPIC=1 | ||||
|             shift | ||||
|         ;; | ||||
| @@ -264,9 +261,7 @@ artixpkg_git_config() { | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|             migrate_to_yaml | ||||
|  | ||||
|             if [[ ! -f Jenkinsfile ]]; then | ||||
|             if [[ ! -f ${REPO_CI} ]]; then | ||||
|                 msg "Adding ci support ..." | ||||
|                 commit_ci | ||||
|             fi | ||||
|   | ||||
| @@ -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 | ||||
| @@ -92,13 +92,15 @@ 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}" | ||||
|         fi | ||||
|         msg_success "Successfully created ${pkgbase}" | ||||
|         if (( clone )); then | ||||
|             artixpkg_git_clone "${pkgbase}" | ||||
|         elif (( config )); then | ||||
|   | ||||
| @@ -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,17 +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 | ||||
|         -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_ | ||||
| } | ||||
|  | ||||
| @@ -73,7 +70,7 @@ artixpkg_git_pull() { | ||||
|                 TOPIC="${1#*=}" | ||||
|                 shift | ||||
|             ;; | ||||
|             --universe) | ||||
|             --all) | ||||
|                 PULL_ALL=1 | ||||
|                 shift | ||||
|             ;; | ||||
| @@ -98,24 +95,18 @@ artixpkg_git_pull() { | ||||
|  | ||||
|     # Query packages of a maintainer | ||||
|     if [[ -n ${MAINTAINER} ]]; then | ||||
|         stat_busy "Query mantainer packages" | ||||
|             local maint | ||||
|             maint="maintainer-${MAINTAINER}" | ||||
|             mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort) | ||||
|         stat_done | ||||
|         local maint | ||||
|         maint="maintainer-${MAINTAINER}" | ||||
|         mapfile -t pkgbases < <(search_topic "${maint}" | yq -P -r '.data | .[].name' | sort) | ||||
|     fi | ||||
|  | ||||
|     if [[ -n ${TOPIC} ]]; then | ||||
|         stat_busy "Query topic packages" | ||||
|             mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort) | ||||
|         stat_done | ||||
|         mapfile -t pkgbases < <(search_topic "${TOPIC}" | yq -P -r '.data | .[].name' | sort) | ||||
|     fi | ||||
|  | ||||
|     # Query all released packages | ||||
|     if (( PULL_ALL )); then | ||||
|         stat_busy "Query all packages" | ||||
|             mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort) | ||||
|         stat_done | ||||
|         mapfile -t pkgbases < <(list_all_repos | yq -P -r '.[] | .name' | sort) | ||||
|     fi | ||||
|  | ||||
|     # parallelization | ||||
|   | ||||
							
								
								
									
										128
									
								
								src/lib/pkg/git/push.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										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 | ||||
|   | ||||
| @@ -14,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 | ||||
| @@ -69,6 +69,7 @@ artixpkg_repo_add() { | ||||
|     done | ||||
|  | ||||
|     DEST="$1" | ||||
|     shift | ||||
|     pkgbases+=("$@") | ||||
|  | ||||
|     if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then | ||||
|   | ||||
| @@ -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}" | ||||
| @@ -65,7 +62,7 @@ artixpkg_repo_import() { | ||||
|     local TAG | ||||
|     local rsync_args=() | ||||
|     rsync_args+=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) | ||||
|     rsync_args+=(--exclude '.git'  --exclude 'Jenkinsfile' --exclude '.gitignore' --exclude 'README.md') | ||||
|     rsync_args+=(--exclude '.git' --exclude '.gitignore' --exclude 'README.md' --exclude '.artixlinux') | ||||
|  | ||||
|     while (( $# )); do | ||||
|         case $1 in | ||||
|   | ||||
| @@ -56,6 +56,7 @@ artixpkg_repo_remove() { | ||||
|     done | ||||
|  | ||||
|     DEST="$1" | ||||
|     shift | ||||
|     pkgbases=("$@") | ||||
|  | ||||
|     if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then | ||||
|   | ||||
| @@ -12,10 +12,11 @@ has_changeset(){ | ||||
|     git fetch origin &>/dev/null | ||||
|  | ||||
|     if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then | ||||
|         msg2 "remote changes: yes" | ||||
|         msg2 "changes: yes" | ||||
|         git status -sb | ||||
|         return 0 | ||||
|     fi | ||||
|     msg2 "remote changes: no" | ||||
|     msg2 "changes: no" | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										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" | ||||
|     ;; | ||||
|   | ||||
| @@ -18,16 +18,20 @@ rebuild=false | ||||
|  | ||||
| mkchrootpkg_args=(-c -n) | ||||
|  | ||||
| cmd=${0##*/} | ||||
| repo=${cmd#*-} | ||||
| base_devel=('base-devel') | ||||
| base_packages=('base-devel') | ||||
| chroots_pkg="${CHROOTS_DIR}/buildpkg" | ||||
| arch=$(uname -m) | ||||
|  | ||||
| cmd=${0##*/} | ||||
|  | ||||
| tag=${cmd#buildpkg-} | ||||
| arch=${tag##*-} | ||||
| repo=${tag%-*} | ||||
|  | ||||
| usage() { | ||||
|     printf 'Usage: %s [options] -- [mkchrootpkg_args]\n' "${0##*/}" | ||||
|     printf '    -r <dir>           Create chroots in this directory\n' | ||||
|     printf '    -d <dir>           Destination repo chroot\n' | ||||
|     printf '    -a <arch>          Build arch chroot\n' | ||||
|     printf '    -c                 Recreate the chroot before building\n' | ||||
|     printf '    -m                 Major rebuild\n' | ||||
|     printf '    -N                 Disable check() function\n' | ||||
| @@ -39,35 +43,46 @@ usage() { | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| opts='hcCNmr:d:' | ||||
| opts='hcCNmr:d:a:' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         r) chroots_pkg="$OPTARG" ;; | ||||
|         d) repo="$OPTARG" ;; | ||||
|         a) arch="$OPTARG" ;; | ||||
|         c) create_first=true ;; | ||||
|         m) rebuild=true ;; | ||||
|         m) rebuild=true; repo=${repo%-*} ;; | ||||
|         C) mkchrootpkg_args+=(-C) ;; | ||||
|         N) mkchrootpkg_args+=(-N) ;; | ||||
|         h|?) usage 0 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| if ${rebuild};then | ||||
|     repo='default' | ||||
| else | ||||
|     case ${repo} in | ||||
|         system|world|galaxy) repo='default' ;; | ||||
|         lib32*) base_devel+=('multilib-devel') ;; | ||||
|         *-gremlins|*-goblins) repo=${repo#*-} ;; | ||||
|     esac | ||||
| if [[ "${repo}" == lib32* ]]; then | ||||
|     base_packages+=('multilib-devel') | ||||
| fi | ||||
|  | ||||
| pacman_conf="${DATADIR}/pacman.conf.d/${repo}.conf" | ||||
| [[ -f "${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" ]] && pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" | ||||
| if [[ -f ${USER_CONF_DIR}/pacman.conf.d/${repo}.conf ]]; then | ||||
|     pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}.conf" | ||||
| fi | ||||
| if [[ -f ${DATADIR}/pacman.conf.d/${repo}-${arch}.conf ]]; then | ||||
|     pacman_conf="${DATADIR}/pacman.conf.d/${repo}-${arch}.conf" | ||||
|     if [[ -f ${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf ]]; then | ||||
|         pacman_conf="${USER_CONF_DIR}/pacman.conf.d/${repo}-${arch}.conf" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| makepkg_conf="${DATADIR}/makepkg.conf.d/${arch}.conf" | ||||
| [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf" | ||||
| if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf ]]; then | ||||
|     makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${arch}.conf" | ||||
| fi | ||||
| if [[ -f ${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then | ||||
|     makepkg_conf="${DATADIR}/makepkg.conf.d/${repo}-${arch}.conf" | ||||
|     if [[ -f ${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf ]]; then | ||||
|         makepkg_conf="${USER_CONF_DIR}/makepkg.conf.d/${repo}-${arch}.conf" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| if [[ -f "${DATADIR}/setarch-aliases.d/${arch}" ]]; then | ||||
|     read -r set_arch < "${DATADIR}/setarch-aliases.d/${arch}" | ||||
| @@ -76,19 +91,19 @@ else | ||||
| fi | ||||
|  | ||||
| # Architecture-specific Mount | ||||
| # arch_mounts=() | ||||
| # if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then | ||||
| #     mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}" | ||||
| # fi | ||||
| # for arch_mount in "${arch_mounts[@]}"; do | ||||
| #     if [[ $arch_mount = rw* ]]; then | ||||
| #         arch_mount=${arch_mount#rw } | ||||
| #         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-d" "$arch_mount") | ||||
| #     elif [[ $arch_mount = ro* ]]; then | ||||
| #         arch_mount=${arch_mount#ro } | ||||
| #         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=("-D" "$arch_mount") | ||||
| #     fi | ||||
| # done | ||||
| arch_mounts=() | ||||
| if [[ -f "${DATADIR}/mount.d/${arch}" ]]; then | ||||
|     mapfile -t arch_mounts < "${DATADIR}/mount.d/${arch}" | ||||
| fi | ||||
| for arch_mount in "${arch_mounts[@]}"; do | ||||
|     if [[ $arch_mount = rw* ]]; then | ||||
|         arch_mount=${arch_mount#rw } | ||||
|         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-B:$arch_mount") | ||||
|     elif [[ $arch_mount = ro* ]]; then | ||||
|         arch_mount=${arch_mount#ro } | ||||
|         in_array "$arch_mount" "${mkchrootpkg_args[@]}" || mkchrootpkg_args+=(-b "-Br:$arch_mount") | ||||
|     fi | ||||
| done | ||||
|  | ||||
| check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME "${BASH_SOURCE[0]}" "$@" | ||||
|  | ||||
| @@ -114,7 +129,7 @@ if ${create_first} || [[ ! -d "${chroots_pkg}/${repo}-${arch}" ]];then | ||||
|         -C "${pacman_conf}" \ | ||||
|         -M "${makepkg_conf}" \ | ||||
|         "${chroots_pkg}/${repo}-${arch}/root" \ | ||||
|         "${base_devel[@]}" || abort | ||||
|         "${base_packages[@]}" || abort | ||||
| else | ||||
|     lock 9 "${chroots_pkg}/${repo}-${arch}/root.lock" "Locking clean chroot" | ||||
|     chroot-run \ | ||||
|   | ||||
| @@ -23,41 +23,66 @@ usage() { | ||||
|         list for both packages and a library list for both packages. | ||||
|  | ||||
|         OPTIONS | ||||
|             -r, --rmdir     Remove the temporary directory | ||||
|             -w, --warn      Print a warning in case of differences | ||||
|             -h, --help      Show this help text | ||||
|             -r, --rmdir          Remove the temporary directory | ||||
|             -w, --warn           Print a warning in case of differences | ||||
|             -M, --makepkg-config Set an alternate makepkg configuration file | ||||
|             -h, --help           Show this help text | ||||
| _EOF_ | ||||
| } | ||||
|  | ||||
| RMDIR=0 | ||||
| WARN=0 | ||||
| MAKEPKG_CONF=/etc/makepkg.conf | ||||
|  | ||||
| OPT_SHORT='rwh' | ||||
| OPT_LONG=('rmdir' 'warn' 'help') | ||||
| if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then | ||||
|     exit 1 | ||||
| fi | ||||
| set  -- "${OPTRET[@]}" | ||||
|  | ||||
| while :; do | ||||
| # option checking | ||||
| while (( $# )); do | ||||
|     case $1 in | ||||
|         -r|--rmdir) | ||||
|             RMDIR=1 | ||||
|             ;; | ||||
|         -w|--warn) | ||||
|             WARN=1 | ||||
|             ;; | ||||
|         -h|--help) | ||||
|             usage | ||||
|             exit 0 | ||||
|             ;; | ||||
|         -r|--rmdir) | ||||
|             RMDIR=1 | ||||
|             shift | ||||
|             ;; | ||||
|         -w|--warn) | ||||
|             WARN=1 | ||||
|             shift | ||||
|             ;; | ||||
|         -M|--makepkg-config) | ||||
|             MAKEPKG_CONF="$2" | ||||
|             shift 2 | ||||
|             ;; | ||||
|         --) | ||||
|             shift; break | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|         -*|--*) | ||||
|             die "invalid argument: %s" "$1" | ||||
|             ;; | ||||
|         *) | ||||
|             break | ||||
|             ;; | ||||
|     esac | ||||
|     shift | ||||
| done | ||||
|  | ||||
| # Source makepkg.conf; fail if it is not found | ||||
| if [[ -r "${MAKEPKG_CONF}" ]]; then | ||||
|     # shellcheck source=config/makepkg/x86_64.conf | ||||
|     source "${MAKEPKG_CONF}" | ||||
| else | ||||
|     die "${MAKEPKG_CONF} not found!" | ||||
| fi | ||||
|  | ||||
| # Source user-specific makepkg.conf overrides | ||||
| if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" | ||||
| elif [[ -r "$HOME/.makepkg.conf" ]]; then | ||||
|     # shellcheck source=/dev/null | ||||
|     source "$HOME/.makepkg.conf" | ||||
| fi | ||||
|  | ||||
| if [[ ! -f PKGBUILD ]]; then | ||||
|     die 'This must be run in the directory of a built package.' | ||||
| fi | ||||
| @@ -84,8 +109,10 @@ for _pkgname in "${pkgname[@]}"; do | ||||
|  | ||||
|     if (( $# )); then | ||||
|         case $1 in | ||||
|             *://*) | ||||
|                 pkgurl=$1 ;; | ||||
|             /*|*/*) | ||||
|                 pkgurl=file://$(readlink -m "$1") ;; | ||||
|                 pkgurl=$(readlink -m "$1") ;; | ||||
|             *.pkg.tar*) | ||||
|                 pkgurl=$1 ;; | ||||
|             '') | ||||
|   | ||||
| @@ -29,6 +29,7 @@ clean_first=0 | ||||
| run_namcap=0 | ||||
| run_checkpkg=0 | ||||
| temp_chroot=0 | ||||
| tmp_opts="nosuid,nodev,size=50%,nr_inodes=2m" | ||||
|  | ||||
| bindmounts='' | ||||
|  | ||||
| @@ -47,7 +48,7 @@ usage() { | ||||
|     printf ' <chrootdir>/{root, copy} but only "root" is required\n' | ||||
|     printf ' by default. The working copy will be created as needed\n' | ||||
|     printf '\n' | ||||
|     printf "The chroot 'root' directory must be created via the following\n" | ||||
|     printf 'The chroot "root" directory must be created via the following\n' | ||||
|     printf 'command:\n' | ||||
|     printf '    mkchroot <chrootdir>/root base-devel\n' | ||||
|     printf '\n' | ||||
| @@ -60,26 +61,24 @@ usage() { | ||||
|     printf 'Flags:\n' | ||||
|     printf ' -h         This help\n' | ||||
|     printf ' -c         Clean the chroot before building\n' | ||||
|     printf ' -d <dir>   Bind directory into build chroot as read-write\n' | ||||
|     printf ' -D <dir>   Bind directory into build chroot as read-only\n' | ||||
|     printf ' -b <arg>   Bind mount directory/file into build chroot\n' | ||||
|     printf ' -u         Update the working copy of the chroot before building\n' | ||||
|     printf '           This is useful for rebuilds without dirtying the pristine\n' | ||||
|     printf '           chroot\n' | ||||
|     printf '            This is useful for rebuilds without dirtying the pristine\n' | ||||
|     printf '            chroot\n' | ||||
|     printf ' -r <dir>   The chroot dir to use\n' | ||||
|     printf ' -I <pkg>   Install a package into the working copy of the chroot\n' | ||||
|     printf ' -l <copy>  The directory to use as the working copy of the chroot\n' | ||||
|     printf '            Useful for maintaining multiple copies\n' | ||||
|     printf '            Default: %s\n' "$copy" | ||||
|     printf ' -n         Run namcap on the package\n' | ||||
|     printf ' -C         Run checkpkg on the package\n' | ||||
|     printf ' -N         Disable check() function\n' | ||||
|     printf ' -C         Run checkpkg on the package\n' | ||||
|     printf ' -T         Build in a temporary directory\n' | ||||
|     printf ' -U         Run makepkg as a specified user\n' | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| # {{{ functions | ||||
|  | ||||
| # Usage: sync_chroot $chrootdir $copydir [$copy] | ||||
| sync_chroot() { | ||||
|     local chrootdir=$1 | ||||
| @@ -142,9 +141,7 @@ install_packages() { | ||||
|     pkgnames=("${install_pkgs[@]##*/}") | ||||
|  | ||||
|     cp -- "${install_pkgs[@]}" "$copydir/root/" | ||||
|     chroot-run \ | ||||
|         -b "${bindmounts}" \ | ||||
|         "$copydir" \ | ||||
|     chroot-run -b "${bindmounts}" "$copydir" \ | ||||
|         bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}" | ||||
|     ret=$? | ||||
|     rm -- "${pkgnames[@]/#/$copydir/root/}" | ||||
| @@ -208,8 +205,6 @@ _chrootbuild() { | ||||
|     # No coredumps | ||||
|     ulimit -c 0 | ||||
|  | ||||
|     . /etc/locale.conf | ||||
|  | ||||
|     # shellcheck source=/dev/null | ||||
|     . /etc/profile | ||||
|  | ||||
| @@ -354,13 +349,11 @@ if [[ ! -d $copydir ]] || (( clean_first )); then | ||||
|     sync_chroot "$chrootdir" "$copydir" "$copy" | ||||
| fi | ||||
|  | ||||
|  | ||||
| (( update_first )) && chroot-run \ | ||||
|         -b "${bindmounts}" \ | ||||
|         "$copydir" \ | ||||
|         pacman -Syuu --noconfirm | ||||
|  | ||||
|  | ||||
| if [[ -n ${install_pkgs[*]:-} ]]; then | ||||
|     install_packages | ||||
|     ret=$? | ||||
| @@ -378,6 +371,7 @@ download_sources | ||||
| prepare_chroot | ||||
|  | ||||
| if chroot-run \ | ||||
|     -t "${tmp_opts}" \ | ||||
|     -b "${bindmounts} -B:${PWD}:/startdir -B:${SRCDEST}:/srcdest" \ | ||||
|     "$copydir" \ | ||||
|     /chrootbuild "${makepkg_args[@]}" | ||||
| @@ -409,6 +403,7 @@ else | ||||
|             warning "Skipped checkpkg due to missing repo packages" | ||||
|             exit 0 | ||||
|         fi | ||||
|  | ||||
|         # download package files if any non-local location exists | ||||
|         for remotepkg in "${remotepkgs[@]}"; do | ||||
|             if [[ $remotepkg != file://* ]]; then | ||||
| @@ -420,8 +415,9 @@ else | ||||
|                 break | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         msg2 "Checking packages" | ||||
|         sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}" | ||||
|         sudo -u "$makepkg_user" checkpkg --rmdir --warn --makepkg-config "$copydir/etc/makepkg.conf" "${remotepkgs[@]/#file:\/\//}" | ||||
|     fi | ||||
|     true | ||||
| fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user