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