Compare commits

...

96 Commits

Author SHA1 Message Date
defafdecce commitpkg: default to new layout 2020-06-14 09:02:48 +02:00
2c21030758 comparepkg: fix db check 2020-06-13 22:30:38 +02:00
e29cd8817a merge branch 'layout' into master 2020-06-13 20:09:27 +02:00
e551f42888 yaml (#32)
pkg2yaml: fixes

deploypkg: fix remove

pkg2yaml: change format
2020-06-12 15:24:42 +02:00
ad33bccd49 rm alpm 2020-06-08 03:02:53 +02:00
31eeaa9a0d docker (#30)
dpcker: upd pacman.conf

add docker data
2020-06-08 02:19:58 +02:00
f5daac0d67 commitpkg: commit removal of obsolete arch 2020-05-28 20:12:33 +02:00
2484ea39a4 commitpkg: support are change when moving 2020-05-28 15:54:43 +02:00
9b222bdb83 commitpkg: rm old arch on change of arch
signpkg: tweak msg
2020-05-28 10:39:19 +02:00
a3e6b17c5f deploypkg: add xz compat 2020-05-25 22:49:27 +02:00
21a37f6b00 buildtree: quote vars 2020-05-25 22:10:26 +02:00
80416b76d5 buildtree: fix import for new pkgs 2020-05-25 21:01:05 +02:00
2113ffe4c6 newrepo (#29)
buildtree: only -n creates repos

buildtree: move msg in sync func

buildtree: deprecate pkglists
2020-05-25 18:29:24 +02:00
438473c878 quote vars 2020-05-25 00:14:17 +02:00
86c5c2f47b rm signfile 2020-05-24 19:06:51 +02:00
d333c245c0 next (#28)
deploypkg: fix return codes

deploypkg: only remocve if pkg is in repo

deploypkg: refactor

move unique funcs to script

signpkg: fix typo

minor tweaks
rm commented code

signpkg: load makepkg.conf

buildpkg & deploypkg: add optarg to set repo, proves to be better in pipeline to generate cmd args
add signpkg

start 0.18

deploypkg: add sign check
2020-05-24 11:15:25 +02:00
4a650f00d7 Merge pull request 's6: use database names instead of directory names' (#27) from Dudemanguy/artools:master into master 2020-04-28 17:52:27 +02:00
08b73032a2 buildtree: add gfx group 2020-04-28 17:51:53 +02:00
1a250c2167 s6: use database names instead of directory names
It's possible for a service in s6 to exist but for its name to not
actually be the same as the name of an existing directory (ex: a
pipeline of a logger and service daemon). Instead, rework this function
to detect if a service exists based on whether it is defined in the
s6-rc database.
2020-04-27 16:42:58 -05:00
46431619f2 chroot-run: don't sync tz 2020-04-26 18:49:48 +02:00
12d2159c12 deploypkg: exclude *.log 2020-04-26 18:49:23 +02:00
3865ceab58 buildtree: support new super repos 2020-03-18 22:04:37 +01:00
890e631e1b add net pkg group 2020-03-08 16:27:08 +01:00
273e928905 mkchrootpkg: kill left over nspawn 2020-03-01 10:40:23 +01:00
f5c328f8e5 mkchrootpkg: use the chroot database to find checkpkg packages 2020-02-27 20:53:06 +01:00
4089151791 buildtree: fix team assignment for *testing & *staging 2020-02-25 10:19:51 +01:00
211579f9d7 lib/gitea: remove admin 2020-02-24 00:11:18 +01:00
2a85209e1e buildtree: fix patching 2020-02-21 15:54:49 +01:00
40d691bc85 redo arch repos 2020-02-19 23:12:37 +01:00
d9da64eb51 buildtree: use jq to parse json (#26)
buildtree: fix team for new repos

doouble quote some vars

add git.sh lib

fixes

comparepkg: clean up ugly code

house cleaning

comparepkg: slightly improve performance

fix typo

revert to cloning a new pkg repo

test subrepo init

let buildtree assign team to new repo

commitpkg: check team pkgs

buildtree: improve repo creation, should work push to create with gitea-1.11

commitpkg: fix cross check

commitpkg: run team change check last

commitpkg: rm empty func

commitpkg: change team on cross repo move

buildtree: use jq to parse json
2020-02-16 11:34:58 +01:00
5902f987cc Merge branch 's6-typo-fix' of artix/artools into master 2020-01-26 00:32:46 +01:00
bfa888251e s6: fix a typo 2020-01-24 20:47:58 -06:00
0ecfa1a0f6 Merge branch 's6-fixes' of artix/artools into master 2020-01-24 18:47:07 +01:00
e60180ebdb s6: manually rebuild s6-linux-init binaries
Since the s6-linux-init package is more generic now and has no special
compile options, the binaries need to be rebuilt while making the
liveiso so it works correctly.
2020-01-24 10:59:07 -06:00
20b65d06c8 pkg: use zst 2020-01-11 02:59:10 +01:00
c7728c2e5b start 0.17 2020-01-11 02:58:40 +01:00
a0ca1ab3a4 update makepkg.conf 2020-01-10 23:03:18 +01:00
911a0fff36 buildiso: fix grub theme paths 2019-12-15 23:30:31 +01:00
f80c51e8d3 buildiso: fix umount on error 2019-12-15 23:00:17 +01:00
1e948b3ef5 buildiso: fix cal unpackfs path 2019-12-14 23:14:47 +01:00
bf0a9bc7fc don't create dirs in load_config 2019-12-13 22:50:58 +01:00
a4a690951c set extglob 2019-12-13 21:06:22 +01:00
e05765269e buildiso: fix msg 2019-12-13 18:59:50 +01:00
3df364189b mkchrootpkg: apply arch patch 2019-12-13 18:59:27 +01:00
974df38738 iso (#23) 2019-12-13 18:06:47 +01:00
7b831d8867 arch patches (#22) 2019-12-13 17:51:20 +01:00
7bf4dff1a1 buildiso: add grub kopt msg 2019-11-27 09:55:35 +01:00
529e73e2ab buildiso: add dracut support 2019-11-19 21:41:49 +01:00
7be420a24f buildiso: set proper device label for rw 2019-11-19 14:55:31 +01:00
cd76f7d3cf buildiso: use md5 for img sums 2019-11-19 01:10:58 +01:00
918b95db58 initcpio: fix pxe 2019-11-19 01:10:17 +01:00
77c464d603 initcpio (#21) 2019-11-18 21:06:16 +01:00
55945b8975 refact (#20) 2019-11-17 21:59:25 +01:00
f83cc2a4a8 lib & var cleaning 2019-11-12 10:19:28 +01:00
6d5dbc5774 data: sync with pacman 5.2.0-2 2019-11-09 00:58:27 +01:00
36ee26e18c use libmakepkg load_makepkg_config() 2019-11-09 00:19:24 +01:00
0b9e18ed5b use libmakepkg load_makepkg_config() 2019-11-09 00:15:18 +01:00
b26b6da61c chroot-run: remove obsolete mount calls 2019-11-09 00:14:42 +01:00
e1f762cd91 mkchrootpkg $ chroot-run: add arch patches, simplify bindmounts 2019-11-08 20:49:36 +01:00
ee55448fe0 buildtree: update patch_pkg() 2019-11-05 21:36:40 +01:00
b3415307b1 buildiso: drop empty yaml lines 2019-11-05 18:32:53 +01:00
2516fccc3b comparepkg: delete list on rerun 2019-11-05 18:23:15 +01:00
45ecb59ffd Makefile: 0.16 2019-11-05 01:03:37 +01:00
11fff303f9 readme: update 2019-11-05 01:00:20 +01:00
b05d1c999f buildiso: write cal postcfg 2019-11-05 00:56:55 +01:00
1572c94389 small fixes 2019-11-04 10:35:31 +01:00
601f7c30ba buildiso: update profile default services 2019-11-03 00:25:37 +01:00
2f37832558 batchpkg: quote vars 2019-11-03 00:25:08 +01:00
bf70341af9 batchpkg: add run option 2019-11-02 16:30:51 +01:00
ea3a06a9bc fix user info 2019-11-02 15:58:50 +01:00
812cf9a317 lib fixes 2019-11-02 15:35:28 +01:00
70aa91ddd8 simplify conf loading 2019-11-02 14:44:07 +01:00
15407b612a batchpkg: add listname arg 2019-11-02 11:09:23 +01:00
8d4adb5b47 chroot-run: always sync localtime from host 2019-11-02 10:40:49 +01:00
85659bfa5e Makefile: update 2019-11-02 01:07:52 +01:00
f0799f85e4 data: rename artools conf files
lib: load new file names
2019-11-02 01:07:36 +01:00
3810656411 conf (#19) 2019-11-01 23:57:02 +01:00
79b99440fc batchpkg & comparepkg: fixes 2019-11-01 21:04:23 +01:00
d353cd8d46 Makefile: include batchpkg 2019-11-01 19:48:31 +01:00
90623d0485 add batchpkg
comparepkg writes a move and upgrade list which batchpkg reads
2019-11-01 19:47:08 +01:00
2c0c3b2032 buildiso: cal conf cleaning 2019-11-01 18:59:18 +01:00
a463f22118 start 0.16 2019-11-01 18:57:56 +01:00
86504ac676 chroot-run: sync host localtime with chroot 2019-11-01 18:56:21 +01:00
450ac445e4 buildiso: adopt new s6 cal module conf 2019-11-01 03:10:21 +01:00
56b350ffd0 buildiso: improve cal services conf writing 2019-11-01 00:02:30 +01:00
a6c4513867 buildiso: rm postcfg sed 2019-10-31 17:49:58 +01:00
c50715f258 buildiso: standardize the services-$init.conf calamares yaml 2019-10-30 10:01:04 +01:00
77296c4527 buildiso: services cleanup 2019-10-29 20:41:04 +01:00
3f419cc41e Merge branch 's6-fixups' of artix/artools into master 2019-10-29 19:30:04 +01:00
60d7ac62a5 buildiso: s6 service fixes 2019-10-29 11:53:35 -05:00
8cc8b66e7f buildpkg & mkchrootpkg: add check switches 2019-10-27 02:23:13 +01:00
0ae8c16801 arch-patches (#17) 2019-10-27 02:38:30 +02:00
bb674109ed buildiso: fix live.conf 2019-10-23 11:47:40 +02:00
ede2ac11e2 buildtree: fix has_changes condition 2019-10-22 12:48:50 +02:00
e8913b07c3 buildiso: adopt kernel changes of version file 2019-10-15 21:21:46 +02:00
f5f9a2acb8 buildiso: fix calamares unpackfs.conf writing 2019-10-10 00:16:07 +02:00
55 changed files with 2009 additions and 1630 deletions

View File

@@ -1,4 +1,4 @@
VERSION=0.15 VERSION=0.19
CHROOT_VERSION=0.10 CHROOT_VERSION=0.10
@@ -10,11 +10,10 @@ LIBDIR = $(PREFIX)/lib
DATADIR = $(PREFIX)/share DATADIR = $(PREFIX)/share
CPIODIR = $(SYSCONFDIR)/initcpio CPIODIR = $(SYSCONFDIR)/initcpio
CONF = \ BASE_CONF = \
data/artools.conf data/conf/artools-base.conf
BASE_BIN = \ BASE_BIN = \
bin/base/signfile \
bin/base/chroot-run \ bin/base/chroot-run \
bin/base/mkchroot \ bin/base/mkchroot \
bin/base/basestrap \ bin/base/basestrap \
@@ -27,7 +26,10 @@ BASE_LIBS = \
BASE_UTIL = lib/util-base.sh BASE_UTIL = lib/util-base.sh
BASE_DATA = \ BASE_DATA = \
$(wildcard data/base/pacman*.conf) $(wildcard data/pacman/pacman*.conf)
PKG_CONF = \
data/conf/artools-pkg.conf
PKG_BIN = \ PKG_BIN = \
bin/pkg/buildpkg \ bin/pkg/buildpkg \
@@ -41,7 +43,9 @@ PKG_BIN = \
bin/pkg/links-add \ bin/pkg/links-add \
bin/pkg/checkpkg \ bin/pkg/checkpkg \
bin/pkg/finddeps \ bin/pkg/finddeps \
bin/pkg/find-libdeps bin/pkg/find-libdeps \
bin/pkg/batchpkg \
bin/pkg/signpkg
LN_COMMITPKG = \ LN_COMMITPKG = \
extrapkg \ extrapkg \
@@ -86,16 +90,19 @@ LN_DEPLOYPKG = \
deploypkg-gnome-wobble deploypkg-gnome-wobble
PKG_LIBS = \ PKG_LIBS = \
$(wildcard lib/pkg/*) $(wildcard lib/pkg/*.sh)
PKG_UTIL = lib/util-pkg.sh PKG_UTIL = lib/util-pkg.sh
PKG_DATA = \ PKG_DATA = \
data/pkg/makepkg.conf data/pacman/makepkg.conf
PATCHES = \ PATCHES = \
$(wildcard data/patches/*.patch) $(wildcard data/patches/*.patch)
ISO_CONF = \
data/conf/artools-iso.conf
ISO_BIN = \ ISO_BIN = \
bin/iso/buildiso \ bin/iso/buildiso \
bin/iso/deployiso bin/iso/deployiso
@@ -109,9 +116,6 @@ ISO_LIBS = \
ISO_UTIL = lib/util-iso.sh ISO_UTIL = lib/util-iso.sh
ISO_DATA = \
data/iso/mkinitcpio.conf
DIRMODE = -dm0755 DIRMODE = -dm0755
FILEMODE = -m0644 FILEMODE = -m0644
MODE = -m0755 MODE = -m0755
@@ -151,7 +155,7 @@ clean:
install_base: install_base:
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(FILEMODE) $(BASE_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR) install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR) install $(MODE) $(BASE_BIN) $(DESTDIR)$(BINDIR)
@@ -164,6 +168,9 @@ install_base:
install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS)
install_pkg: install_pkg:
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(PKG_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR) install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR)
@@ -189,6 +196,9 @@ install_cpio:
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install +make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install
install_iso: install_cpio install_iso: install_cpio
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(ISO_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(BINDIR) install $(DIRMODE) $(DESTDIR)$(BINDIR)
install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR) install $(MODE) $(ISO_BIN) $(DESTDIR)$(BINDIR)
@@ -198,9 +208,6 @@ install_iso: install_cpio
install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS) install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS)
install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)
install $(FILEMODE) $(ISO_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS)
install: install_base install_pkg install_iso install: install_base install_pkg install_iso
.PHONY: all clean install install_base install_pkg install_iso .PHONY: all clean install install_base install_pkg install_iso

View File

@@ -28,7 +28,7 @@ artools
- pkg: - pkg:
* namcap * namcap
* git-subrepo * git-subrepo
* jshon * jq
- iso: - iso:
* dosfstools * dosfstools
@@ -39,15 +39,18 @@ artools
#### Configuration #### Configuration
artools.conf is the central configuration file for artools. artools-{base,pkg,iso}.conf are the configuration files for artools.
By default, the config is installed in By default, the config files are installed in
/etc/artools/artools.conf ```bash
/etc/artools/artools-{base,pkg,iso}.conf
```
A user artools.conf can be placed in A user artools-{base,pkg,iso}.conf can be placed in
$HOME/.config/artools/artools.conf
```bash
$HOME/.config/artools/artools-{base,pkg,iso}.conf
```
If the userconfig is present, artools will load the userconfig values, however, if variables have been set in the systemwide If the userconfig is present, artools will load the userconfig values, however, if variables have been set in the systemwide
@@ -55,13 +58,17 @@ These values take precedence over the userconfig.
Best practise is to leave systemwide file untouched. Best practise is to leave systemwide file untouched.
By default it is commented and shows just initialization values done in code. By default it is commented and shows just initialization values done in code.
Tools configuration is done in artools.conf or by args. Tools configuration is done in artools-{base,pkg,iso}.conf or by args.
Specifying args will override artools.conf settings. Specifying args will override artools-{base,pkg,iso}.conf settings.
Both, pacman.conf and makepkg.conf for chroots are loaded from Both, pacman.conf and makepkg.conf for chroots are loaded from
/usr/share/artools/{makepkg,pacman-*}.conf ```bash
usr/share/artools/{makepkg,pacman-*}.conf
```
and can be overridden dropping them in and can be overridden dropping them in
$HOME/.config/artools/ ```bash
$HOME/.config/artools/
```

View File

@@ -46,10 +46,6 @@ select_os(){
fi fi
} }
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
automount=false automount=false
usage() { usage() {

View File

@@ -46,6 +46,7 @@ newroot=/mnt
hostcache=0 hostcache=0
copykeyring=1 copykeyring=1
copymirrorlist=1 copymirrorlist=1
pacmode=-Sy
usage() { usage() {
echo "usage: ${0##*/} [options] root [packages...]" echo "usage: ${0##*/} [options] root [packages...]"
@@ -54,6 +55,7 @@ usage() {
echo " -G Avoid copying the host's pacman keyring to the target" echo " -G Avoid copying the host's pacman keyring to the target"
echo " -i Avoid auto-confirmation of package selections" echo " -i Avoid auto-confirmation of package selections"
echo " -M Avoid copying the host's mirrorlist to the target" echo " -M Avoid copying the host's mirrorlist to the target"
echo ' -U Use pacman -U to install packages'
echo " -h Print this help message" echo " -h Print this help message"
echo '' echo ''
echo ' basestrap installs packages to the specified new root directory.' echo ' basestrap installs packages to the specified new root directory.'
@@ -65,7 +67,7 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts=':C:cGiM' opts=':C:cGiMU'
while getopts ${opts} arg; do while getopts ${opts} arg; do
case "${arg}" in case "${arg}" in
@@ -74,6 +76,7 @@ while getopts ${opts} arg; do
i) interactive=1 ;; i) interactive=1 ;;
G) copykeyring=0 ;; G) copykeyring=0 ;;
M) copymirrorlist=0 ;; M) copymirrorlist=0 ;;
U) pacmode=-U ;;
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;; :) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
?) usage 0 ;; ?) usage 0 ;;
esac esac
@@ -109,7 +112,7 @@ if (( copykeyring ));then
fi fi
msg2 'Installing packages to %s' "$newroot" msg2 'Installing packages to %s' "$newroot"
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then if ! unshare --fork --pid pacman -r "$newroot" $pacmode "${pacman_args[@]}"; then
die 'Failed to install packages to new root' die 'Failed to install packages to new root'
fi fi

View File

@@ -23,6 +23,8 @@ umask 0022
working_dir='' working_dir=''
files=() files=()
mount_args=()
usage() { usage() {
echo "Usage: ${0##*/} [options] working-dir [run arguments]" echo "Usage: ${0##*/} [options] working-dir [run arguments]"
echo "A wrapper around chroot. Provides support for pacman." echo "A wrapper around chroot. Provides support for pacman."
@@ -33,16 +35,15 @@ usage() {
echo ' -c <dir> Set pacman cache' echo ' -c <dir> Set pacman cache'
echo ' -f <file> Copy file from the host to the chroot' echo ' -f <file> Copy file from the host to the chroot'
echo ' -s Do not run setarch' echo ' -s Do not run setarch'
echo ' -r <list> Bind mountargs ro' echo ' -b <list> Bind mountargs'
echo ' -w <list> Bind mountargs rw' echo ' List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]'
echo ' List format [src1:target1 ... srcN:targetN]'
echo ' -h This message' echo ' -h This message'
exit 1 exit 1
} }
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hC:M:c:r:w:f:s' opts='hC:M:c:b:f:s'
while getopts ${opts} arg; do while getopts ${opts} arg; do
case "${arg}" in case "${arg}" in
@@ -51,8 +52,7 @@ while getopts ${opts} arg; do
c) cache_dirs+=("$OPTARG") ;; c) cache_dirs+=("$OPTARG") ;;
f) files+=("$OPTARG") ;; f) files+=("$OPTARG") ;;
s) nosetarch=1 ;; s) nosetarch=1 ;;
r) bindmounts_ro=("$OPTARG") ;; b) bindmounts=("$OPTARG"); mount_args+=(${bindmounts[@]}) ;;
w) bindmounts_rw=("$OPTARG") ;;
h|?) usage ;; h|?) usage ;;
*) error "invalid argument '$arg'"; usage ;; *) error "invalid argument '$arg'"; usage ;;
esac esac
@@ -76,17 +76,23 @@ fi
host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#'))
for host_mirror in "${host_mirrors[@]}"; do
if [[ $host_mirror == *file://* ]]; then
host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
info "host mirror: %s" "$host_mirror"
in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror")
fi
done
while read -r line; do while read -r line; do
mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \ mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
--repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#') --repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1#')
if [[ ${lines[0]} != ${host_mirrors[0]} ]]; then for line in "${lines[@]}"; do
for line in "${lines[@]}"; do if [[ $line = file://* ]]; then
if [[ $line = file://* ]]; then line=${line#file://}
line=${line#file://} in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line") fi
fi done
done
fi
done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list) done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
copy_hostconf () { copy_hostconf () {
@@ -95,9 +101,9 @@ copy_hostconf () {
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" [[ -n $pacman_conf ]] && cp $pacman_conf "${working_dir}/etc/pacman.conf"
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" [[ -n $makepkg_conf ]] && cp $makepkg_conf "${working_dir}/etc/makepkg.conf"
local file local file
for file in "${files[@]}"; do for file in "${files[@]}"; do
@@ -105,36 +111,31 @@ copy_hostconf () {
cp -T "$file" "$working_dir$file" cp -T "$file" "$working_dir$file"
done done
sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "$1/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]//:/\\:}" "-B:/etc/hosts:/etc/hosts")
for cache_dir in "${cache_dirs[@]:1}"; do
mount_args+=("-Br:${cache_dir//:/\\:}:${cache_dir//:/\\:}")
done
chroot_extra_mount() { chroot_extra_mount() {
chroot_add_resolv_conf "$1" chroot_add_resolv_conf "${working_dir}"
chroot_mount "/etc/hosts" "$1/etc/hosts" -B
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
# if [[ -e /etc/localtime ]];then
# [[ -e $1/etc/localtime ]] || touch $1/etc/localtime
# chroot_mount "/etc/localtime" "$1/etc/localtime" -B
# fi
for cache_dir in ${cache_dirs[@]:1}; do for arg in ${mount_args[@]}; do
chroot_mount "$cache_dir" "$1${cache_dir}" -Br local flag=${arg%%:*}
local dest=${arg##*:}
local src=${arg%:*}
src=${src#*:}
chroot_mount "${src}" "${working_dir}${dest}" "${flag}"
done done
}
for m in ${bindmounts_ro[@]}; do sync_host_localtime(){
chroot_mount "${m%%:*}" "$1${m##*:}" -Br if [[ -e /etc/localtime ]]; then
done cp -L /etc/localtime "${working_dir}"/etc/localtime
fi
for m in ${bindmounts_rw[@]}; do
chroot_mount "${m%%:*}" "$1${m##*:}" -B
done
for host_mirror in "${host_mirrors[@]}"; do
if [[ $host_mirror == *file://* ]]; then
host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br
fi
done
} }
umask 0022 umask 0022
@@ -146,11 +147,13 @@ elif [[ $(cat "$working_dir/.artools") != ${CHROOTVERSION} ]]; then
die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}" die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "${CHROOTVERSION}"
fi fi
#sync_host_localtime
chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}" chroot_api_mount "${working_dir}" || die "failed to setup API filesystems in chroot %s" "${working_dir}"
chroot_extra_mount "${working_dir}" chroot_extra_mount
copy_hostconf "${working_dir}" copy_hostconf
eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf") eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")

View File

@@ -15,6 +15,7 @@
. @libdir@/artools/util-base.sh . @libdir@/artools/util-base.sh
working_dir='' working_dir=''
umode=''
files=() files=()
chroot_args=() chroot_args=()
@@ -22,6 +23,7 @@ chroot_args=()
usage() { usage() {
echo "Usage: ${0##*/} [options] working-dir package-list..." echo "Usage: ${0##*/} [options] working-dir package-list..."
echo ' options:' echo ' options:'
echo ' -U Use pacman -U to install packages'
echo ' -C <file> Location of a pacman config file' echo ' -C <file> Location of a pacman config file'
echo ' -M <file> Location of a makepkg config file' echo ' -M <file> Location of a makepkg config file'
echo ' -c <dir> Set pacman cache' echo ' -c <dir> Set pacman cache'
@@ -33,10 +35,11 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hC:M:c:f:s' opts='hUC:M:c:f:s'
while getopts ${opts} arg; do while getopts ${opts} arg; do
case "${arg}" in case "${arg}" in
U) umode=U ;;
C) pacman_conf="$OPTARG" ;; C) pacman_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;; M) makepkg_conf="$OPTARG" ;;
c) cache_dir="$OPTARG" ;; c) cache_dir="$OPTARG" ;;
@@ -45,8 +48,10 @@ while getopts ${opts} arg; do
h|?) usage ;; h|?) usage ;;
*) error "invalid argument '%s'" "$arg"; usage ;; *) error "invalid argument '%s'" "$arg"; usage ;;
esac esac
chroot_args+=("-$arg") if [[ $arg != U ]]; then
[[ -v OPTARG ]] && chroot_args+=("$OPTARG") chroot_args+=("-$arg")
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
fi
done done
shift $(($OPTIND - 1)) shift $(($OPTIND - 1))
@@ -88,7 +93,7 @@ for f in "${files[@]}"; do
cp "$f" "$working_dir$f" cp "$f" "$working_dir$f"
done done
basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \ basestrap -${umode}Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages' ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen" printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"

View File

@@ -1,35 +0,0 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-base.sh
load_user_info
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
file_to_sign="$1"
if [ ! -e "$1" ]; then
error "%s does not exist!" "$file_to_sign"
exit 1
fi
if [[ -n "${BUILDBOT_GPGP}" ]]; then
msg2 "Signing [%s]" "${file_to_sign##*/}"
gpg --batch --passphrase "${BUILDBOT_GPGP}" --detach-sign "$file_to_sign"
else
msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..."
gpg --detach-sign --use-agent -u "${GPGKEY}" "$file_to_sign"
fi

View File

@@ -12,9 +12,10 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-iso.sh . @libdir@/artools/util-iso.sh
prepare_artools
gen_iso_fn(){ gen_iso_fn(){
local vars=("artix") name local vars=("artix") name
vars+=("${PROFILE}") vars+=("${PROFILE}")
@@ -42,19 +43,24 @@ prepare_build(){
esac esac
pacman_conf="${DATADIR}/$pac_file" pacman_conf="${DATADIR}/$pac_file"
[[ -f ${USERCONFDIR}/artools/$pac_file ]] && pacman_conf="${USERCONFDIR}/artools/$pac_file" [[ -f ${USER_CONF_DIR}/$pac_file ]] && pacman_conf="${USER_CONF_DIR}/$pac_file"
iso_file=$(gen_iso_fn).iso iso_file=$(gen_iso_fn).iso
iso_label="ARTIX_$(date +%Y%m)" iso_label="ARTIX_$(date +%Y%m)"
basestrap_args+=(-C ${pacman_conf}) basestrap_args+=(-C ${pacman_conf})
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH} work_dir=${CHROOTS_ISO}/${PROFILE}/artix
prepare_dir "${ISO_POOL}"
iso_dir="${ISO_POOL}/${PROFILE}" iso_dir="${ISO_POOL}/${PROFILE}"
iso_root=${CHROOTS_ISO}/${PROFILE}/iso iso_root=${CHROOTS_ISO}/${PROFILE}/iso
live_dir=/LiveOS
mnt_dir=${CHROOTS_ISO}/${PROFILE}/mnt mnt_dir=${CHROOTS_ISO}/${PROFILE}/mnt
prepare_dir "${mnt_dir}" prepare_dir "${mnt_dir}"
prepare_dir "${iso_dir}" prepare_dir "${iso_dir}"
prepare_dir "${iso_root}" prepare_dir "${iso_root}"
@@ -73,6 +79,44 @@ display_settings(){
show_profile show_profile
} }
mk_squash(){
local timer=$(get_timer)
make_sfs "${work_dir}/rootfs"
[[ -d "${work_dir}/livefs" ]] && make_sfs "${work_dir}/livefs"
show_elapsed_time "${FUNCNAME}" "${timer}"
}
mk_iso(){
touch "${iso_root}/.artix"
msg "Making bootable image"
# Sanity checks
[[ ! -d "${iso_root}" ]] && return 1
if [[ -f "${iso_dir}/${iso_file}" ]]; then
msg2 "Removing existing bootable image..."
rm -rf "${iso_dir}/${iso_file}"
fi
assemble_iso
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
}
mk_boot(){
local timer=$(get_timer)
run_safe "make_bootfs"
run_safe "make_grub"
show_elapsed_time "${FUNCNAME}" "${timer}"
}
mk_chroots(){
local timer=$(get_timer)
load_pkgs "${ROOT_LIST}" "${INITSYS}"
run_safe "make_rootfs"
if [[ -n ${LIVE_LIST} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}"
run_safe "make_livefs"
fi
show_elapsed_time "${FUNCNAME}" "${timer}"
}
build(){ build(){
msg "Start building [%s]" "${PROFILE}" msg "Start building [%s]" "${PROFILE}"
if ${clean_first};then if ${clean_first};then
@@ -93,32 +137,45 @@ build(){
rm -rf --one-file-system "${iso_root}" rm -rf --one-file-system "${iso_root}"
fi fi
if ${iso_only}; then case true in
[[ ! -d ${work_dir} ]] && die "Create images: %s -p %s -x" "${cmd}" "${PROFILE}" ${chroot_only})
compress_images mk_chroots
exit 1 warning "Continue squash: %s -p %s -sc ..." "${cmd}" "${PROFILE}"
fi exit 1
if ${images_only}; then ;;
prepare_images ${boot_only})
warning "Continue compress: %s -p %s -zc ..." "${cmd}" "${PROFILE}" mk_boot
exit 1 warning "Continue iso: %s -p %s -zc ..." "${cmd}" "${PROFILE}"
else exit 1
prepare_images ;;
compress_images ${squash_only})
fi mk_squash
warning "Continue boot: %s -p %s -bc ..." "${cmd}" "${PROFILE}"
exit 1
;;
${iso_only})
[[ ! -d ${work_dir} ]] && die "Create chroot: %s -p %s -x" "${cmd}" "${PROFILE}"
mk_iso
;;
*)
mk_chroots
mk_boot
mk_squash
mk_iso
;;
esac
msg "Finished building [%s]" "${PROFILE}" msg "Finished building [%s]" "${PROFILE}"
show_elapsed_time "${FUNCNAME}" "${timer_start}" show_elapsed_time "${FUNCNAME}" "${timer_start}"
} }
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
clean_first=true clean_first=true
pretend=false pretend=false
images_only=false chroot_only=false
iso_only=false iso_only=false
persist=false persist=false
use_dracut=false
squash_only=false
boot_only=false
basestrap_args=(-GMc) basestrap_args=(-GMc)
cmd=${0##*/} cmd=${0##*/}
@@ -134,13 +191,16 @@ usage() {
echo " [default: ${ISO_POOL}]" echo " [default: ${ISO_POOL}]"
echo ' -i <name> Init system to use' echo ' -i <name> Init system to use'
echo " [default: ${INITSYS}]" echo " [default: ${INITSYS}]"
echo ' -g <key> The gpg key for sfs signing' echo ' -g <key> The gpg key for img signing'
echo " [default: ${GPG_KEY}]" echo " [default: ${GPG_KEY}]"
echo ' -m Set SquashFS image mode to persistence' echo ' -m Set SquashFS image mode to persistence'
echo ' -c Disable clean work dir' echo ' -c Disable clean work dir'
echo ' -x Build images only' echo ' -x Build chroot only'
echo ' -s Squash chroot only'
echo ' -b Generate iso boot only'
echo ' -z Generate iso only' echo ' -z Generate iso only'
echo ' Requires pre built images (-x)' echo ' Requires pre built images (-x)'
echo ' -d Use dracut instead of mkinitcpio for iso initramfs'
echo ' -q Query settings and pretend build' echo ' -q Query settings and pretend build'
echo ' -h This help' echo ' -h This help'
echo '' echo ''
@@ -150,7 +210,7 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='p:r:t:i:g:czxmqh' opts='p:r:t:i:g:czsbxmdqh'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
@@ -160,9 +220,12 @@ while getopts "${opts}" arg; do
i) INITSYS="$OPTARG" ;; i) INITSYS="$OPTARG" ;;
g) GPG_KEY="$OPTARG" ;; g) GPG_KEY="$OPTARG" ;;
c) clean_first=false ;; c) clean_first=false ;;
x) images_only=true ;; x) chroot_only=true ;;
z) iso_only=true ;; z) iso_only=true ;;
s) squash_only=true ;;
b) boot_only=true ;;
m) persist=true ;; m) persist=true ;;
d) use_dracut=true ;;
q) pretend=true ;; q) pretend=true ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;

View File

@@ -12,7 +12,9 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh . @libdir@/artools/util-iso.sh
prepare_artools
connect(){ connect(){
echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}" echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}"
@@ -30,10 +32,6 @@ sync_dir(){
show_elapsed_time "${FUNCNAME}" "${timer_start}" show_elapsed_time "${FUNCNAME}" "${timer_start}"
} }
load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
update=false update=false
verbose=false verbose=false

73
bin/pkg/batchpkg.in Normal file
View File

@@ -0,0 +1,73 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. /usr/lib/artools/util-pkg.sh
prepare_artools
batch_move() {
local name="${1:-pkg_moves}"
local pkglist=${TREE_DIR_ARTIX}/$name.list
[[ -f $pkglist ]] || die "%s does not exist!" "$pkglist"
while read entry;do
local pkg=${entry##*:}
local src=${entry%:*}
src=${src#*:}
local dest=${entry%%:*}
if ${runlist}; then
"${dest}"pkg -s "${src}" -u -p "${pkg}"
else
msg "%s" "${dest}pkg -s ${src} -u -p ${pkg}"
fi
done < $pkglist
}
# batch_upgrade() {
# local pkglist=${TREE_DIR_ARTIX}/pkg_upgrades.list
# [[ -f $pkglist ]] || die "%s does not exist!" "$pkglist"
# while read entry;do
# local pkg=${entry#*:}
# local dest=${entry%:*}
# echo "buildtree -i -p ${pkg}"
# echo "${dest}pkg -u -p ${pkg}"
# done < $pkglist
# }
usage() {
echo "Usage: ${0##*/} [optional listname]"
echo ' -r Run generated commands'
echo ' -h This help'
echo ''
echo ''
exit $1
}
movelistname=pkg_moves
runlist=false
opts='rh'
while getopts "${opts}" arg; do
case "${arg}" in
r) runlist=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
done
shift $(($OPTIND - 1))
movelistname="$1"; shift
batch_move "$movelistname"

View File

@@ -12,15 +12,14 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
load_user_info prepare_artools
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
create_first=false create_first=false
rebuild=false rebuild=false
no_check=false
is_checkpkg=false
mkchrootpkg_args=(-c -n) mkchrootpkg_args=(-c -n)
@@ -31,8 +30,11 @@ base_devel=('base-devel')
usage() { usage() {
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
echo " -r <dir> Create chroots in this directory" echo " -r <dir> Create chroots in this directory"
echo " -d <dir> Destination repo chroot"
echo ' -c Recreate the chroot before building' echo ' -c Recreate the chroot before building'
echo ' -m Major rebuild' echo ' -m Major rebuild'
echo ' -N Disable check() function'
echo ' -C Run checkpkg after built'
echo ' -h This help' echo ' -h This help'
echo '' echo ''
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
@@ -42,13 +44,16 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hcmr:' opts='hcCNmr:d:'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
r) CHROOTS_PKG="$OPTARG" ;; r) CHROOTS_PKG="$OPTARG" ;;
d) repo="$OPTARG" ;;
c) create_first=true ;; c) create_first=true ;;
m) rebuild=true ;; m) rebuild=true ;;
C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;;
N) no_check=true; mkchrootpkg_args+=(-N) ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;; *) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
esac esac
@@ -65,10 +70,10 @@ else
fi fi
pacman_conf="${DATADIR}/pacman-${repo}.conf" pacman_conf="${DATADIR}/pacman-${repo}.conf"
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf" [[ -f ${USER_CONF_DIR}/pacman-${repo}.conf ]] && pacman_conf="${USER_CONF_DIR}/pacman-${repo}.conf"
makepkg_conf="${DATADIR}/makepkg.conf" makepkg_conf="${DATADIR}/makepkg.conf"
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf" [[ -f ${USER_CONF_DIR}/makepkg.conf ]] && makepkg_conf="${USER_CONF_DIR}/makepkg.conf"
check_root SOURCE_DATE_EPOCH check_root SOURCE_DATE_EPOCH
@@ -89,7 +94,7 @@ if ${create_first} || [[ ! -d "${CHROOTS_PKG}/${repo}-${ARCH}" ]];then
lock_close 9 lock_close 9
rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}" rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}"
mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}" (umask 0022; mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}")
setarch "${ARCH}" mkchroot \ setarch "${ARCH}" mkchroot \
-C "${pacman_conf}" \ -C "${pacman_conf}" \
-M "${makepkg_conf}" \ -M "${makepkg_conf}" \

View File

@@ -12,9 +12,47 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
prepare_artools
patch_pkg(){
local pkgpath="$1"
local pkg=${pkgpath%/*}
pkg=${pkg##*/}
case $pkg in
glibc)
msg2 "Patching %s" "$pkg"
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i $pkgpath/PKGBUILD
;;
linux|linux-lts)
msg2 "Patching %s" "$pkg"
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i $pkgpath/PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-i $pkgpath/config
;;
bash)
msg2 "Patching %s" "$pkg"
sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \
-e "s|etc/bash.|etc/bash/|g" \
-e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \
-i $pkgpath/PKGBUILD
cd $pkgpath
patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch
updpkgsums
cd ../..
;;
gstreamer|gst-plugins-*|licenses)
msg2 "Patching %s" "$pkg"
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i $pkgpath/PKGBUILD
;;
esac
}
pull_tree_arch(){ pull_tree_arch(){
cd ${TREE_DIR_ARCH} cd ${TREE_DIR_ARCH}
for tree in ${TREE_NAMES_ARCH[@]};do for tree in ${TREE_NAMES_ARCH[@]};do
@@ -47,12 +85,12 @@ pull_tree_artix(){
sync_pkg(){ sync_pkg(){
local rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs) local rsync_args=(-aWxvci --progress --delete-before --no-R --no-implied-dirs)
local src="$1" dest="$2" local src="$1" dest="$2"
msg "Sync from Arch [%s] to Artix [%s]" "${src##*archlinux/}" "${dest##*artixlinux/}"
rsync "${rsync_args[@]}" $src/ $dest/ rsync "${rsync_args[@]}" $src/ $dest/
} }
show_deps(){ show_deps(){
local src="$1" repo="$2" local src="$1"
. $src/PKGBUILD 2>/dev/null . $src/PKGBUILD 2>/dev/null
@@ -60,7 +98,6 @@ show_deps(){
local archver=$(get_full_version) local archver=$(get_full_version)
msg2 "repo: %s" "$repo"
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}" [[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
msg2 "pkgname: %s" "${pkgname[*]}" msg2 "pkgname: %s" "${pkgname[*]}"
[[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}" [[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}"
@@ -74,84 +111,65 @@ show_deps(){
} }
subrepo_new(){ subrepo_new(){
local group="${1:-$GROUP}" team="${2:-$TEAM}" cd ${TREE_DIR_ARTIX}/${GROUP}
local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk
cd ${TREE_DIR_ARTIX}/$group
local org=$(get_pkg_org "${PACKAGE}") local org=$(get_pkg_org "${PACKAGE}")
create_repo "${PACKAGE}" "$org" create_repo "${PACKAGE}" "$org"
add_repo_to_team "${PACKAGE}" "$org" "$team" add_repo_to_team "${PACKAGE}" "$org" "${TEAM}"
subrepo_clone "${PACKAGE}" "$org" subrepo_clone "${PACKAGE}" "$org"
prepare_dir "$dest" prepare_dir "${TREE_DIR_ARTIX}/${GROUP}/${PACKAGE}/trunk"
commit_jenkins_files "${PACKAGE}" commit_jenkins_files "${PACKAGE}"
} }
from_arch(){ from_arch(){
local src= dest=
cd ${TREE_DIR_ARTIX} cd ${TREE_DIR_ARTIX}
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") local srcpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" [[ -z $srcpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local package=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE} local repo=$(find_repo "$srcpath")
local repo=$(find_repo "$package" "${staging}" "${unstable}") msg "repo: %s" "$repo"
src=$package/repos/$repo local archpath=$srcpath/$repo
local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${PACKAGE}")
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") show_deps "$archpath"
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
dest=${TREE_DIR_ARTIX}/$tree_dir/${PACKAGE}/trunk if [[ -f "$artixpath"/.gitrepo ]]; then
artixpath="$artixpath"/trunk
msg "tree: %s" "$tree_dir" if [[ -d "$artixpath" ]];then
show_deps "$src" "$repo" sync_pkg "$archpath" "$artixpath"
patch_pkg "$artixpath"
if [[ -d $dest ]];then fi
cd ${TREE_DIR_ARTIX}/$git_tree_artix
. $dest/PKGBUILD 2>/dev/null
local artixver=$(get_full_version)
msg2 "Artix Version: %s" "$artixver"
else else
subrepo_new "$tree_dir" "$git_tree_arch" die "Package '%s' does not exist!" "${PACKAGE}"
fi fi
msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir"
sync_pkg "$src" "$dest"
patch_pkg "${PACKAGE}"
} }
view_build(){ view_build(){
local src= local archpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") [[ -z $archpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" local repo=$(find_repo "${archpath}")
archpath=$archpath/$repo
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE} msg2 "repo: %s" "$repo"
local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}") show_deps "$archpath"
src=$pkg_path/repos/$repo
show_deps "$src" "$repo"
} }
check_tree(){ check_tree(){
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}") local archpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}" [[ -z $archpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch") local group=${artixpath%/*}
msg "tree_dir: %s" "$tree_dir" msg "group: %s" "${group##*/}"
[[ -z $git_tree_artix ]] && msg2 "exists: %s" "no"
[[ -n $git_tree_artix ]] && msg2 "exists: %s" "yes" [[ -z $artixpath ]] && msg2 "exists: %s" "no"
[[ -n $artixpath ]] && msg2 "exists: %s" "yes"
} }
sync_repos(){ sync_repos(){
@@ -165,11 +183,11 @@ sync_repos(){
fi fi
} }
load_user_info load_makepkg_config
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" testing=true
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" staging=true
load_vars /etc/makepkg.conf unstable=false
sync=false sync=false
sync_arch=true sync_arch=true
@@ -177,33 +195,32 @@ sync_artix=true
import=false import=false
view=false view=false
createnew=false createnew=false
conf=false
unstable=false
staging=true
sync_group=false sync_group=false
check=false check=false
PACKAGE='' PACKAGE=''
TEAM=${TREE_NAMES_ARTIX[0]} TEAM='community'
GROUP=${TREE_NAMES_ARTIX[0]} GROUP=${TREE_NAMES_ARTIX[0]}
usage() { usage() {
echo "Usage: ${0##*/} [options]" echo "Usage: ${0##*/} [options]"
echo ' -p <pkg> Package name' echo ' -p <pkg> Package name'
echo ' -t <team> Team name (only with -n)' echo ' -t <team> Team name (only with -n)'
echo ' Possible values: core,extra,community,multilib'
echo " [default: ${TEAM}]" echo " [default: ${TEAM}]"
echo ' -g <group> Group name, the superrepo (only with -n or -s)' echo ' -g <group> Group name, the superrepo (only with -n or -s)'
echo " [default: ${GROUP}]" echo " [default: ${GROUP}]"
echo " -s Clone or pull repos" echo " -s Clone or pull repos"
echo " -z Don't clone or pull arch repos" echo " -a Don't clone or pull arch repos"
echo " -y Don't clone or pull artix repos" echo " -b Don't clone or pull artix repos"
echo ' -i Import a package from arch repos' echo ' -i Import a package from arch repos'
echo ' -n Make new remote subrepo and clone it' echo ' -n New remote subrepo and clone it'
echo ' -u Include kde & gnome unstable (only with -i)'
echo ' -w Exclude staging (only with -i)'
echo ' -v Check if a package is in the artix tree(s)' echo ' -v Check if a package is in the artix tree(s)'
echo ' -c View package depends' echo ' -c View package depends'
echo ' -x Exclude testing (only with -i)'
echo ' -y Exclude staging (only with -i)'
echo ' -z Include kde & gnome unstable (only with -i)'
echo ' -h This help' echo ' -h This help'
echo '' echo ''
echo '' echo ''
@@ -212,7 +229,7 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='p:t:g:uwsinzycvh' opts='p:t:g:sinabcvxyzh'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
@@ -220,14 +237,15 @@ while getopts "${opts}" arg; do
t) TEAM="$OPTARG" ;; t) TEAM="$OPTARG" ;;
g) GROUP="$OPTARG"; sync_group=true ;; g) GROUP="$OPTARG"; sync_group=true ;;
s) sync=true ;; s) sync=true ;;
z) sync_arch=false ;; a) sync_arch=false ;;
y) sync_artix=false ;; b) sync_artix=false ;;
i) import=true ;; i) import=true ;;
n) createnew=true ;; n) createnew=true ;;
w) staging=false ;;
u) unstable=true ;;
c) check=true ;; c) check=true ;;
v) view=true ;; v) view=true ;;
x) testing=false ;;
y) staging=false ;;
z) unstable=true ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;
esac esac
@@ -238,6 +256,8 @@ shift $(($OPTIND - 1))
prepare_dir "${TREE_DIR_ARTIX}" prepare_dir "${TREE_DIR_ARTIX}"
prepare_dir "${TREE_DIR_ARCH}" prepare_dir "${TREE_DIR_ARCH}"
set_arch_repos "$testing" "$staging" "$unstable"
${sync} && sync_repos ${sync} && sync_repos
${view} && view_build ${view} && view_build

View File

@@ -12,21 +12,73 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
shopt -s extglob shopt -s extglob
if [[ -r '/etc/makepkg.conf' ]]; then load_makepkg_config
source '/etc/makepkg.conf'
else
die '/etc/makepkg.conf not found!'
fi
load_user_info pkgver_equal() {
if [[ $1 = *-* && $2 = *-* ]]; then
# if both versions have a pkgrel, then they must be an exact match
[[ $1 = "$2" ]]
else
# otherwise, trim any pkgrel and compare the bare version.
[[ ${1%%-*} = "${2%%-*}" ]]
fi
}
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" find_cached_package() {
load_vars /etc/makepkg.conf local searchdirs=("$PKGDEST" "$PWD") results=()
local targetname=$1 targetver=$2 targetarch=$3
local dir pkg pkgbasename name ver rel arch r results
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
for pkg in "$dir"/*.pkg.tar?(.!(sig|*.*)); do
[[ -f $pkg ]] || continue
# avoid adding duplicates of the same inode
for r in "${results[@]}"; do
[[ $r -ef $pkg ]] && continue 2
done
# split apart package filename into parts
pkgbasename=${pkg##*/}
pkgbasename=${pkgbasename%.pkg.tar*}
arch=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$arch"}
rel=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$rel"}
ver=${pkgbasename##*-}
name=${pkgbasename%-"$ver"}
if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
pkgver_equal "$targetver" "$ver-$rel"; then
results+=("$pkg")
fi
done
done
case ${#results[*]} in
0)
return 1
;;
1)
printf '%s\n' "${results[0]}"
return 0
;;
*)
error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
;;
esac
}
usage() { usage() {
cat <<- _EOF_ cat <<- _EOF_
@@ -60,17 +112,17 @@ while :; do
case $1 in case $1 in
-r|--rmdir) -r|--rmdir)
RMDIR=1 RMDIR=1
;; ;;
-w|--warn) -w|--warn)
WARN=1 WARN=1
;; ;;
-h|--help) -h|--help)
usage usage
exit 0 exit 0
;; ;;
--) --)
shift; break shift; break
;; ;;
esac esac
shift shift
done done
@@ -79,8 +131,9 @@ if [[ ! -f PKGBUILD ]]; then
die 'This must be run in the directory of a built package.' die 'This must be run in the directory of a built package.'
fi fi
# shellcheck source=PKGBUILD.proto
. ./PKGBUILD . ./PKGBUILD
if [[ $arch == 'any' ]]; then if [[ ${arch[0]} == 'any' ]]; then
CARCH='any' CARCH='any'
fi fi
@@ -91,7 +144,7 @@ TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
for _pkgname in "${pkgname[@]}"; do for _pkgname in "${pkgname[@]}"; do
comparepkg=$_pkgname comparepkg=$_pkgname
pkgurl= pkgurl=
target_pkgver=$(get_full_version) target_pkgver=$(get_full_version "$_pkgname")
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
fi fi
@@ -142,7 +195,7 @@ for _pkgname in "${pkgname[@]}"; do
(( WARN )) && warning "$message" || msg "$message" (( WARN )) && warning "$message" || msg "$message"
echo "$diff_output" echo "$diff_output"
else else
msg "No soname differences for %s" "$_pkgname." msg "No soname differences for %s." "$_pkgname"
fi fi
done done

View File

@@ -12,147 +12,159 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
get_path(){ prepare_artools
local repo="$1" pkg=trunk/PKGBUILD
if [[ $repo != trunk ]]; then
[[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD
[[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD
fi
echo $pkg
}
prepare_commit(){ prepare_commit(){
local dest="$1" # create new layout, copy & remove repos
[[ -d repos/$dest ]] && git rm -r repos/$dest if [[ -d repos ]]; then
[[ ! -d repos ]] && mkdir repos msg "Switching to new layout ..."
[[ ! -d repos/$dest ]] && mkdir repos/$dest [[ ! -d "$CARCH" ]] && mkdir "$CARCH"
}
commit_pkg(){
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${git_tree} ]];then
cd ${TREE_DIR_ARTIX}/${git_tree}
local head=$(get_local_head)
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
local pkgbuild=$(get_path "${REPO_SRC}")
. $pkgbuild
[[ $arch == 'any' ]] && CARCH=any
local version=$(get_full_version)
local commit_msg=""
if ${remove};then
local action='remove'
if [[ "${REPO_SRC}" == 'trunk' ]];then
local pkg=${PACKAGE}
git rm -r trunk
else
local pkg="${PACKAGE}-$version"
git rm -r repos/"${REPO_SRC}-$CARCH"
fi
commit_msg="[${REPO_SRC}] '$pkg' ${action}"
msg "Action: %s" "$commit_msg"
else
local action='modify'
commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}"
msg "Action: %s" "$commit_msg"
git add .
if [[ -d repos/"${REPO_SRC}-$CARCH" ]] || [[ -d repos/"${REPO_SRC}"-any ]]; then
mkdir "$CARCH/${REPO_SRC}"
local old_src="${REPO_SRC}-$CARCH"
[[ "$arch" == any ]] && old_src="${REPO_SRC}"-any
cp repos/"$old_src"/* "$CARCH/${REPO_SRC}"/
git add $CARCH/${REPO_SRC}
fi
if [[ -d repos/"${REPO_DEST}-$CARCH" ]] || [[ -d repos/"${REPO_DEST}"-any ]]; then
mkdir "$CARCH/${REPO_DEST}"
local old_dest="${REPO_DEST}-$CARCH"
[[ "$arch" == any ]] && old_dest="${REPO_DEST}"-any
cp repos/"$old_dest"/* "$CARCH/${REPO_DEST}"/
git add $CARCH/${REPO_DEST}
fi fi
git commit -m "$commit_msg"
cd ${TREE_DIR_ARTIX}/${git_tree} git rm -r repos
git commit -m "switch to new repo layout"
msg "Done switch"
fi
${push} && pull_tree "${git_tree}" "$head" if [[ $action == 'add' ]] || [[ $action == 'move' ]] ;then
[[ -d "$CARCH/${REPO_DEST}" ]] && git rm -r "$CARCH/${REPO_DEST}"
# subrepo_pull "${PACKAGE}" [[ ! -d "$CARCH" ]] && mkdir "$CARCH"
subrepo_push "${PACKAGE}" [[ ! -d "$CARCH/${REPO_DEST}" ]] && mkdir "$CARCH/${REPO_DEST}"
subrepo_clean "${PACKAGE}"
${push} && push_tree "${git_tree}"
git prune
else
error "Package '%s' does not exist!" "${PACKAGE}"
fi fi
} }
symlink_commit_pkg(){ check_team(){
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") if [[ "${REPO_SRC}" == "core" && "${REPO_DEST}" == "extra" ]] || \
if [[ -n ${git_tree} ]];then [[ "${REPO_SRC}" == "extra" && "${REPO_DEST}" == "core" ]] || \
[[ "${REPO_SRC}" == "extra" && "${REPO_DEST}" == "community" ]] || \
[[ "${REPO_SRC}" == "community" && "${REPO_DEST}" == "extra" ]] ;then
cd ${TREE_DIR_ARTIX}/${git_tree} local org=$(get_pkg_org "${PACKAGE}")
add_repo_to_team "${PACKAGE}" "$org" "${REPO_DEST}"
remove_repo_from_team "${PACKAGE}" "$org" "${REPO_SRC}"
fi
}
local head=$(get_local_head) config() {
[[ "${REPO_SRC}" != 'trunk' ]] && pkgbuild="$CARCH/${REPO_SRC}"/PKGBUILD
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} if [[ ! -f "$pkgbuild" ]]; then
pkgbuild=repos/"${REPO_SRC}-${CARCH}"/PKGBUILD
[[ -f repos/"${REPO_SRC}"-any/PKGBUILD ]] && pkgbuild=repos/"${REPO_SRC}"-any/PKGBUILD
fi
}
local pkgbuild=$(get_path "${REPO_SRC}") commit_pkg() {
if ${remove};then
. $pkgbuild action='remove'
[[ $arch == 'any' ]] && CARCH=any if [[ "${REPO_SRC}" == 'trunk' ]];then
local pkg=${PACKAGE}
local version=$(get_full_version) git rm -r trunk
if [[ ${REPO_SRC} == 'trunk' ]];then
local action='add'
local dest="${REPO_DEST}-$CARCH"
prepare_commit "$dest"
cp trunk/* repos/$dest/
else else
local action='move' local pkg="${PACKAGE}-$(get_full_version)"
local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH"
[[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" prepare_commit
prepare_commit "$dest"
cp repos/$src/* repos/$dest/ git rm -r "$CARCH/${REPO_SRC}"
git rm -r repos/$src
fi fi
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}" local commit_msg="[${REPO_SRC}] '$pkg' ${action}"
msg "Action: %s" "$commit_msg"
else
action='modify'
local commit_msg="[${REPO_SRC}] '${PACKAGE}-$(get_full_version)' ${action}"
msg "Action: %s" "$commit_msg" msg "Action: %s" "$commit_msg"
git add . git add .
git commit -m "$commit_msg" fi
git commit -m "$commit_msg"
}
cd ${TREE_DIR_ARTIX}/${git_tree} repo_commit_pkg() {
if [[ "${REPO_SRC}" == 'trunk' ]];then
action='add'
prepare_commit
cp trunk/* "$CARCH/${REPO_DEST}"/
else
action='move'
[[ ! -f $pkgbuild ]] && die "%s does not exist!" "$pkgbuild"
${push} && pull_tree "${git_tree}" "$head" prepare_commit
cp "$CARCH/${REPO_SRC}"/* "$CARCH/${REPO_DEST}"/
git rm -r "$CARCH/${REPO_SRC}"
fi
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$(get_full_version)' ${action}"
msg "Action: %s" "$commit_msg"
git add .
git commit -m "$commit_msg"
}
run(){
local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${artixpath} ]];then
local group=${artixpath%/*}
cd ${group}
local head=$(get_local_head)
cd ${artixpath}
config
. $pkgbuild
if [[ "${cmd}" == 'commitpkg' ]];then
commit_pkg
else
repo_commit_pkg
fi
cd ${group}
${push} && pull_tree "${group##*/}" "$head"
# subrepo_pull "${PACKAGE}" # subrepo_pull "${PACKAGE}"
subrepo_push "${PACKAGE}" subrepo_push "${PACKAGE}"
subrepo_clean "${PACKAGE}" subrepo_clean "${PACKAGE}"
${push} && push_tree "${git_tree}" ${push} && push_tree "${group##*/}"
git prune git prune
[[ "${cmd}" != 'commitpkg' ]] && check_team
else else
error "Package '%s' does not exist!" "${PACKAGE}" die "Package '%s' does not exist!" "${PACKAGE}"
fi fi
} }
load_user_info is_valid_repo(){
case "${REPO_SRC}" in
core|extra|community|multilib|testing|community-testing|multilib-testing|staging|community-staging|multilib-staging|gnome-unstable|kde-unstable|trunk) return 0 ;;
*) return 1 ;;
esac
}
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" load_makepkg_config
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
REPO_SRC='trunk' REPO_SRC='trunk'
PACKAGE='' PACKAGE=''
remove=false remove=false
push=false push=false
pkgbuild=trunk/PKGBUILD
cmd=${0##*/} cmd=${0##*/}
REPO_DEST=${cmd%pkg} REPO_DEST=${cmd%pkg}
@@ -185,12 +197,8 @@ done
shift $(($OPTIND - 1)) shift $(($OPTIND - 1))
if $(is_valid_repo "${REPO_SRC}");then if $(is_valid_repo);then
if [[ "${cmd}" == 'commitpkg' ]];then run
commit_pkg
else
symlink_commit_pkg
fi
else else
error "source repository '%s' is not valid!" "${REPO_SRC}" die "source repository '%s' is not valid!" "${REPO_SRC}"
fi fi

View File

@@ -12,207 +12,281 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
compare(){ prepare_artools
local pkgpath="$1" group="$2"
get_import_path(){
local pkg="$1" import_path=
for tree in ${TREE_NAMES_ARCH[@]};do
[[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg
done
echo $import_path
}
compare_m(){
local result=$(vercmp "$artixver" "$archver")
if [[ $artixrepo == *testing* ]] || [[ $artixrepo == *staging* ]]; then
if [[ "$archrepo" == "$artixrepo" ]]; then
msg_row "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
else
msg_row_notify "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
if [[ -n "$archrepo" ]]; then
printf "%s\n" "${a}:${b}:$pkg" >> ${TREE_DIR_ARTIX}/pkg_moves.list
fi
fi
fi
}
compare_u(){
local result=$(vercmp "$artixver" "$archver")
if [ $result -eq -1 ];then
msg_row_upgrade "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
printf "%s\n" "${a}:$pkg" >> ${TREE_DIR_ARTIX}/pkg_upgrades.list
fi
}
compare_d(){
local result=$(vercmp "$artixver" "$archver")
if [ $result -eq 1 ];then
if [[ -n "$archver" ]] && [[ -n "$archrepo" ]];then
msg_row_downgrade "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
fi
}
pre_compare(){
local func="$1" pkgpath="$2"
local group="${pkgpath%/*}"
group=${group##*/}
local pkg=${pkgpath##*/} local pkg=${pkgpath##*/}
local artixrepo=$(find_repo "$pkgpath" "${staging}" "${unstable}") local artixrepo=$(find_repo "$pkgpath")
local artixshow=${artixrepo%-*} local pkgbuild=$pkgpath/$artixrepo/PKGBUILD
local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD
if [[ -f $pkgbuild ]];then if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null . $pkgbuild 2>/dev/null
local artixver=$(get_full_version) local artixver=$(get_full_version)
local archpath=$(get_import_path $pkg) local archpath=$(get_import_path $pkg)
local archrepo=$(find_repo "${archpath}")
pkgbuild=$archpath/$archrepo/PKGBUILD
local node=${artixrepo%/*}
local a=${archrepo#*/} b=${artixrepo#*/}
a="${a%-*}"
local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") [[ "$node" != "$CARCH" ]] && b=${b%-*}
local archshow=${archrepo%-*} if [[ -f "$pkgbuild" ]];then
pkgbuild=$archpath/repos/$archrepo/PKGBUILD
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null . $pkgbuild 2>/dev/null
local archver=$(get_full_version) local archver=$(get_full_version)
fi fi
local result=$(vercmp "$artixver" "$archver") "$func"
local repomatch=false
[[ "$archrepo" == "$artixrepo" ]] && repomatch=true
if ${move};then
if [ $result -gt -1 ];then
case $artixrepo in
*testing*|*staging*)
if $repomatch;then
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
else
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
;;
esac
fi
elif ${upgrades};then
if [ $result -eq -1 ];then
msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
elif ${downgrades};then
if [ $result -eq 1 ];then
if [[ -n $archver ]] && [[ -n $archrepo ]];then
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
fi
fi
unset pkgver epoch pkgrel artixver archver pkgbuild archpath unset pkgver epoch pkgrel artixver archver pkgbuild archpath
fi fi
} }
is_db_entry() { compare_upgrades(){
local pkgname="$1" repo="$(arch2artix $2)" local pkgpath="${1%/*}"
if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then pre_compare compare_u "$pkgpath"
return 0
fi
return 1
} }
check_db(){ compare_downgrades(){
local pkgpath="$1" local pkgpath="${1%/*}"
local pkg=${pkgpath##*/} pre_compare compare_d "$pkgpath"
local sarch=(any ${ARCH}) }
local arch_repos=$(arch_repos "${staging}" "${unstable}")
for repo in ${arch_repos[@]};do compare_move(){
local pkgpath="${1%/*}"
pre_compare compare_m "$pkgpath"
}
for a in ${sarch[@]};do tree_loop(){
local func="$1"
local pkgbuild=$pkgpath/repos/$repo-$a/PKGBUILD for tree in ${TREE_NAMES_ARTIX[@]};do
local pkgs=$(find ${TREE_DIR_ARTIX}/$tree -name trunk)
if [[ -f $pkgbuild ]];then for package in ${pkgs[@]}; do
"$func" "$package"
. $pkgbuild 2>/dev/null
local artixver=$(get_full_version)
local is_entry=false
for name in ${pkgname[@]};do
if is_db_entry "$name-$artixver" "$repo";then
is_entry=true
fi
if ! $is_entry; then
msg_row "${table2}" "$repo" "$name" "$artixver" "$is_entry"
fi
done
unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase
fi
done done
done done
} }
show_compare_header(){
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
}
show_upgrades_table(){
show_compare_header
[[ -f ${TREE_DIR_ARTIX}/pkg_upgrades.list ]] && rm ${TREE_DIR_ARTIX}/pkg_upgrades.list
tree_loop compare_upgrades
}
show_downgrades_table(){
show_compare_header
tree_loop compare_downgrades
}
show_move_table(){
show_compare_header
[[ -f ${TREE_DIR_ARTIX}/pkg_moves.list ]] && rm ${TREE_DIR_ARTIX}/pkg_moves.list
tree_loop compare_move
}
update_db_cache(){ update_db_cache(){
msg "Updating database cache" msg "Updating database cache"
for repo in "${searchrepos[@]}"; do for repo in "${searchrepos[@]}"; do
local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo} local cachedir=${db_cache_dir}/${LINKSDBEXT}/${CARCH}/${repo}
rm -rf "$cachedir" rm -rf "$cachedir"
mkdir -p "$cachedir" mkdir -p "$cachedir"
msg2 "%s" "$repo" msg2 "%s" "$repo"
curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \ curl -L -s "${REPOS_MIRROR}/${repo}/os/${CARCH}/${repo}.${LINKSDBEXT}" \
| bsdtar -xf - -C "$cachedir" | bsdtar -xf - -C "$cachedir"
done done
msg "Done" msg "Done"
} }
query_db() { query_db() {
msg_table_header "${table3}" "Repo" "Package" "Library"
for repo in "${searchrepos[@]}"; do for repo in "${searchrepos[@]}"; do
local prefix= local prefix=
local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ local db=${db_cache_dir}/${LINKSDBEXT}/${ARCH}/${repo}/
if [[ -d ${db} ]]; then if [[ -d ${db} ]]; then
while read -rd '' pkg; do while read -rd '' pkg; do
read -r match read -r match
pkg=${pkg#${db}} pkg=${pkg#${db}}
pkg="${pkg%/*}" pkg="${pkg%/*}"
msg_row "${tableQ}" "${repo}" "${pkg}" "${match}"
msg_row "${table3}" "${repo}" "${pkg}" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u done < <(grep -rZ "${library}" "${db}") | sort -u
fi fi
done done
exit 0
} }
show_version_table(){ show_lib_table() {
${sync} && update_db_cache
msg_table_header "${tableQ}" "Repo" "Package" "Library"
query_db
}
if ${check};then is_db_entry() {
${sync} && update_db_cache local pkgname="$1" repo="${REPOS[$2]}"
msg_table_header "${table2}" "Repo" "Package" "Version" "Database"
elif ${query};then if [[ -d ${db_cache_dir}/${LINKSDBEXT}/${CARCH}/$repo/$pkgname ]];then
${sync} && update_db_cache return 0
query_db
else
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
fi fi
return 1
}
for tree in ${TREE_NAMES_ARTIX[@]};do check_pkg_in_db() {
. $pkgbuild 2>/dev/null
local artixver=$(get_full_version)
local is_entry=false
for name in ${pkgname[@]};do
local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) if is_db_entry "$name-$artixver" "$repo";then
is_entry=true
fi
if ! $is_entry;then
msg_row "${tableU}" "$repo" "$name" "$artixver" "$is_entry"
fi
for package in ${git[@]}; do done
if ${check};then unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase
check_db "$package" }
else
compare "$package" "$tree" check_new() {
fi local func="$1"
done local pkgbuild=$pkgpath/$CARCH/$repo/PKGBUILD
"$func"
}
check_old() {
local func="$1"
for a in any ${CARCH};do
local pkgbuild=$pkgpath/repos/$repo-$a/PKGBUILD
"$func"
done done
} }
load_user_info check_db(){
local pkgpath="${1%/*}"
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf" for repo in ${!REPOS[@]};do
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" if [[ -f $pkgpath/$CARCH/$repo/PKGBUILD ]]; then
load_vars /etc/makepkg.conf check_new "check_pkg_in_db"
else
check_old "check_pkg_in_db"
fi
done
}
unstable=false show_db_table(){
${sync} && update_db_cache
msg_table_header "${tableU}" "Repo" "Package" "Version" "Database"
tree_loop check_db
}
db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
load_makepkg_config
testing=true
staging=true staging=true
unstable=false
upgrades=false upgrades=false
downgrades=false downgrades=false
move=false move=false
check=false
sync=false sync=false
check=false
query=false query=false
artix_repos=( readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
'goblins' 'gremlins' 'system' 'world' readonly tableU="%-20s %-35s %-30s %-10s"
'galaxy-goblins' 'galaxy-gremlins' 'galaxy' readonly tableQ="%-20s %-45s %s"
'lib32-goblins' 'lib32-gremlins' 'lib32'
'gnome-wobble' 'kde-wobble' declare -A REPOS=(
[core]=system
[extra]=world
[community]=galaxy
[multilib]=lib32
[testing]=gremlins
[staging]=goblins
[community-testing]=galaxy-gremlins
[community-staging]=galaxy-goblins
[multilib-testing]=lib32-gremlins
[multilib-staging]=lib32-goblins
[kde-unstable]=kde-wobble
[gnome-unstable]=gnome-wobble
) )
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s" searchrepos=(
readonly table2="%-20s %-35s %-30s %-10s" ${REPOS[kde-unstable]}
readonly table3="%-20s %-45s %s" ${REPOS[gnome-unstable]}
${REPOS[staging]}
searchrepos=(${artix_repos[@]}) ${REPOS[testing]}
${REPOS[core]}
${REPOS[extra]}
${REPOS[community-staging]}
${REPOS[community-testing]}
${REPOS[community]}
${REPOS[multilib-staging]}
${REPOS[multilib-testing]}
${REPOS[multilib]}
)
usage() { usage() {
echo "Usage: ${0##*/} [options] (with -q [libname])" echo "Usage: ${0##*/} [options] (with -q [libname])"
echo ' -u Show upgrade packages' echo ' -u Show upgrade packages'
echo ' -d Show downgrade packages' echo ' -d Show downgrade packages'
echo ' -m Show packages to move' echo ' -m Show packages to move'
echo " -x Don't inlcude staging packages" echo " -x Don't inlcude testing packages"
echo ' -y Include unstable kde and gnome' echo " -y Don't inlcude staging packages"
echo ' -c Check repos' echo ' -z Include unstable kde and gnome'
echo " -s Sync repo databases" echo " -s Sync repo databases"
echo ' -c Check repos'
echo " -q Query repo databases for so libs" echo " -q Query repo databases for so libs"
echo ' -r <repo> Repo name to query' echo ' -r <repo> Repo name to query'
echo ' [default: all]' echo ' [default: all]'
@@ -224,19 +298,20 @@ usage() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='r:qcsudmxyh' opts='r:qcsudmxyzh'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
u) upgrades=true ;; u) upgrades=true ;;
d) downgrades=true ;; d) downgrades=true ;;
m) move=true ;; m) move=true ;;
x) staging=false ;;
y) unstable=true ;;
c) check=true ;;
s) sync=true ;; s) sync=true ;;
c) check=true ;;
q) query=true ;; q) query=true ;;
r) searchrepos=("$OPTARG") ;; r) searchrepos=("$OPTARG") ;;
x) testing=false ;;
y) staging=false ;;
z) unstable=true ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;
esac esac
@@ -246,4 +321,14 @@ shift $(($OPTIND - 1))
library="$1"; shift library="$1"; shift
show_version_table set_arch_repos "$testing" "$staging" "$unstable"
${move} && show_move_table
${upgrades} && show_upgrades_table
${downgrades} && show_downgrades_table
${check} && show_db_table
${query} && show_lib_table

View File

@@ -12,135 +12,44 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
find_cached_pkgfile() { prepare_artools
local searchdirs=("$PKGDEST" "$PWD") results=()
local pkg="$1"
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
results+=$(find "$dir" -type f -name "$pkg")
done
case ${#results[*]} in
0)
return 1
;;
1)
printf '%s\n' "${results[0]}"
return 0
;;
*)
error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
;;
esac
}
get_pkgbasename(){ add(){
local pkg="$1" pkg=${pkgname%.*}
local pkgbasename name ver rel arch for ext in zst xz;do
if pkgfile=$(find_cached_pkgfile "$pkg.$ext");then
pkgbasename=${pkg%.pkg.tar.?z} msg "Found: %s" "${pkgfile}"
arch=${pkgbasename##*-} packages+=("$pkg.$ext")
pkgbasename=${pkgbasename%-"$arch"} action='add'
ln -sf "${pkgfile}"{,.sig} "$repo_path"/
rel=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$rel"}
ver=${pkgbasename##*-}
name=${pkgbasename%-"$ver"}
echo $name
}
update_repo2(){
local repo="$1"
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
for name in ${passfiles[@]}; do
if pkgfile=$(find_cached_pkgfile "$name");then
info "Found: %s" "$name"
if ${add_pkg};then
local action='add'
packages+=("$name")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile}
fi
ln -sf ${pkgfile}{,.sig} $repo_path/
elif ${del_pkg};then
local action='remove'
packages+=("$(get_pkgbasename "$name")")
[[ -e $repo_path/$name ]] && rm $repo_path/$name
[[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig
fi
fi fi
done done
cd $repo_path
if [[ -n $action ]]; then
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
fi
return 0
} }
update_repo(){ remove(){
local repo="$1" pkgfile ver packages+=("$pkgname")
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() action='remove'
rm "$repo_path"/"$pkgname"*pkg.tar*
}
. PKGBUILD repo_action(){
local packages=() action= func="$1"
local pkgsearch=(${pkgname[@]}) for pkgname in ${passfiles[@]}; do
if check_option "debug" "y"; then "$func"
pkgbase=${pkgbase:-${pkgname[@]}}
pkgsearch+=("${pkgbase}-debug")
fi
for name in ${pkgsearch[@]}; do
pkgarch=$(get_pkg_arch "$name")
ver=$(get_full_version)
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
local pkg=${pkgfile##*/}
info "Found: %s" "$pkg"
if ${add_pkg};then
local action='add'
packages+=("$pkg")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile}
fi
ln -sf ${pkgfile}{,.sig} $repo_path/
elif ${del_pkg};then
local action='remove'
packages+=("$name")
[[ -e $repo_path/$pkg ]] && rm $repo_path/$pkg
[[ -e $repo_path/$pkg.sig ]] && rm $repo_path/$pkg.sig
fi
fi
done done
cd $repo_path cd $repo_path
if [[ -n $action ]]; then if [[ -n "$action" ]]; then
repo-$action -R $repo.${PKGDBEXT} ${packages[@]} repo-"$action" -R "${dest_repo}"."${PKGDBEXT}" "${packages[@]}"
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]} ${linksdb} && links-"$action" "${dest_repo}"."${LINKSDBEXT}" "${packages[@]}"
fi fi
return 0
} }
load_user_info load_makepkg_config
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
add_pkg=false add_pkg=false
del_pkg=false rm_pkg=false
sign_pkg=false
linksdb=false linksdb=false
cmd=${0##*/} cmd=${0##*/}
@@ -148,24 +57,24 @@ dest_repo=${cmd#*-}
usage() { usage() {
echo "Usage: ${cmd} [options]" echo "Usage: ${cmd} [options]"
echo ' -d <dest> Destination repository'
echo ' -a Add package(s) to repository' echo ' -a Add package(s) to repository'
echo ' -r Remove package(s) from repository' echo ' -r Remove package(s) from repository'
echo ' -l Use links db' echo ' -l Use links db'
echo ' -s Sign package(s)'
echo ' -h This help' echo ' -h This help'
echo '' echo ''
echo '' echo ''
exit $1 exit $1
} }
opts='arlsh' opts='arlhd:'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
a) add_pkg=true; del_pkg=false ;; d) dest_repo="$OPTARG" ;;
r) del_pkg=true; add_pkg=false ;; a) add_pkg=true; rm_pkg=false ;;
r) rm_pkg=true; add_pkg=false ;;
l) linksdb=true ;; l) linksdb=true ;;
s) sign_pkg=true ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;
esac esac
@@ -177,8 +86,13 @@ passfiles="$@"
prepare_dir "${REPOS_ROOT}" prepare_dir "${REPOS_ROOT}"
repo_path=${REPOS_ROOT}/${dest_repo}/os/${ARCH}
if [[ -n ${passfiles[@]} ]]; then if [[ -n ${passfiles[@]} ]]; then
update_repo2 "${dest_repo}" if ${add_pkg}; then
else repo_action add
update_repo "${dest_repo}" fi
if ${rm_pkg}; then
repo_action remove
fi
fi fi

View File

@@ -12,7 +12,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh . @libdir@/artools/util-pkg.sh
set -e set -e

View File

@@ -33,6 +33,7 @@ REPO_DB_PREFIX=
REPO_DB_SUFFIX= REPO_DB_SUFFIX=
LOCKFILE= LOCKFILE=
CLEAN_LOCK=0 CLEAN_LOCK=0
# PREVENT_DOWNGRADE=0
. @libdir@/artools/util-base.sh . @libdir@/artools/util-base.sh
@@ -52,6 +53,7 @@ Multiple packages to add can be specified on the command line.\n"
printf -- "\n" printf -- "\n"
printf -- "Options:\n" printf -- "Options:\n"
printf -- " -n, --new only add packages that are not already in the database\n" printf -- " -n, --new only add packages that are not already in the database\n"
# printf -- "$(gettext " -p, --prevent-downgrade do not add package to database if a newer version is already present\n")"
elif [[ $cmd == "links-remove" ]] ; then elif [[ $cmd == "links-remove" ]] ; then
printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n"
printf -- "\n" printf -- "\n"
@@ -199,6 +201,18 @@ db_write_entry() {
if (( ONLYADDNEW )); then if (( ONLYADDNEW )); then
return 0 return 0
fi fi
# else
# pkgentry=$(find_pkgentry "$pkgname")
# if [[ -n $pkgentry ]]; then
#
# local version=$(sed -n '/^%VERSION%$/ {n;p;q}' "$pkgentry/desc")
# if (( $(vercmp "$version" "$pkgver") > 0 )); then
# warning "$(gettext "A newer version for '%s' is already present in database")" "$pkgname"
# if (( PREVENT_DOWNGRADE )); then
# return 0
# fi
# fi
# fi
fi fi
# remove an existing entry if it exists, ignore failures # remove an existing entry if it exists, ignore failures
@@ -459,6 +473,7 @@ while (( $# )); do
-s|--sign) SIGN=1 ;; -s|--sign) SIGN=1 ;;
-k|--key) KEY=1 ; shift; GPGKEY=$1 ;; -k|--key) KEY=1 ; shift; GPGKEY=$1 ;;
-v|--verify) VERIFY=1 ;; -v|--verify) VERIFY=1 ;;
# -p|--prevent-downgrade) PREVENT_DOWNGRADE=1 ;;
*) args+=("$1") ;; *) args+=("$1") ;;
esac esac
shift shift

View File

@@ -29,10 +29,11 @@ keepbuilddir=0
update_first=0 update_first=0
clean_first=0 clean_first=0
run_namcap=0 run_namcap=0
run_checkpkg=0
temp_chroot=0 temp_chroot=0
run_nocheck=0
bindmounts_ro=() bindmounts=()
bindmounts_rw=()
copy=$USER copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
@@ -73,6 +74,8 @@ usage() {
echo ' Useful for maintaining multiple copies' echo ' Useful for maintaining multiple copies'
echo " Default: $copy" echo " Default: $copy"
echo '-n Run namcap on the package' echo '-n Run namcap on the package'
echo '-C Run checkpkg on the package'
echo '-N Disable check() function'
echo '-T Build in a temporary directory' echo '-T Build in a temporary directory'
echo '-U Run makepkg as a specified user' echo '-U Run makepkg as a specified user'
exit 1 exit 1
@@ -80,37 +83,31 @@ usage() {
# {{{ functions # {{{ functions
# Usage: sync_chroot $rootdir $copydir [$copy] # Usage: sync_chroot $chrootdir $copydir [$copy]
sync_chroot() { sync_chroot() {
local rootdir=$1 local chrootdir=$1
local copydir=$2 local copydir=$2
local copy=${3:-$2} local copy=${3:-$2}
if [[ "$rootdir" -ef "$copydir" ]]; then if [[ "$chrootdir/root" -ef "$copydir" ]]; then
error 'Cannot sync copy with itself: %s' "$copydir" error 'Cannot sync copy with itself: %s' "$copydir"
return 1 return 1
fi fi
# Get a read lock on the root chroot to make # Get a read lock on the root chroot to make
# sure we don't clone a half-updated chroot # sure we don't clone a half-updated chroot
slock 8 "$rootdir.lock" \ slock 8 "$chrootdir/root.lock" \
"Locking clean chroot [%s]" "$rootdir" "Locking clean chroot [%s]" "$chrootdir/root"
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy" stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy"
if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then
if is_subvolume "$copydir"; then subvolume_delete_recursive "$copydir" ||
subvolume_delete_recursive "$copydir" || die "Unable to delete subvolume %s" "$copydir"
die "Unable to delete subvolume %s" "$copydir" btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null ||
else
# avoid change of filesystem in case of an umount failure
rm --recursive --force --one-file-system "$copydir" ||
die "Unable to delete %s" "$copydir"
fi
btrfs subvolume snapshot "$rootdir" "$copydir" >/dev/null ||
die "Unable to create subvolume %s" "$copydir" die "Unable to create subvolume %s" "$copydir"
else else
mkdir -p "$copydir" mkdir -p "$copydir"
rsync -a --delete -q -W -x "$rootdir/" "$copydir" rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
fi fi
stat_done stat_done
@@ -149,8 +146,7 @@ install_packages() {
cp -- "${install_pkgs[@]}" "$copydir/root/" cp -- "${install_pkgs[@]}" "$copydir/root/"
chroot-run \ chroot-run \
-r "${bindmounts_ro[@]}" \ -b "${bindmounts[@]}" \
-r "${bindmounts_rw[@]}" \
"$copydir" \ "$copydir" \
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}" bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
ret=$? ret=$?
@@ -249,9 +245,6 @@ download_sources() {
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \ env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" || makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" ||
die "Could not download sources." die "Could not download sources."
# Clean up garbage from verifysource
# rm -rf "$builddir"
} }
move_products() { move_products() {
@@ -287,18 +280,19 @@ move_products() {
orig_argv=("$0" "$@") orig_argv=("$0" "$@")
opts='hcur:I:l:nTD:d:U:' opts='hcur:I:l:nNCTb:U:'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "$arg" in case "$arg" in
c) clean_first=1 ;; c) clean_first=1 ;;
D) bindmounts_ro+=("$OPTARG") ;; b) bindmounts+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
u) update_first=1 ;; u) update_first=1 ;;
r) passeddir="$OPTARG" ;; r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;; I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;; l) copy="$OPTARG" ;;
n) run_namcap=1; makepkg_args+=(--install) ;; n) run_namcap=1; makepkg_args+=(--install) ;;
N) run_nocheck=1; makepkg_args+=(--nocheck) ;;
C) run_checkpkg=1 ;;
T) temp_chroot=1; copy+="-$$" ;; T) temp_chroot=1; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;; U) makepkg_user="$OPTARG" ;;
h|*) usage ;; h|*) usage ;;
@@ -335,12 +329,12 @@ for arg in "${@:$OPTIND}"; do
esac esac
done done
load_user_info
umask 0022 umask 0022
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" ORIG_HOME=$HOME
load_vars /etc/makepkg.conf IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}")
load_makepkg_config
HOME=$ORIG_HOME
# Use PKGBUILD directory if these don't exist # Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD [[ -d $PKGDEST ]] || PKGDEST=$PWD
@@ -352,14 +346,13 @@ load_vars /etc/makepkg.conf
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy" lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
if [[ ! -d $copydir ]] || (( clean_first )); then if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir/root" "$copydir" "$copy" sync_chroot "$chrootdir" "$copydir" "$copy"
fi fi
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest") bindmounts+=("-B:${PWD}:/startdir" "-B:${SRCDEST}:/srcdest")
(( update_first )) && chroot-run \ (( update_first )) && chroot-run \
-r "${bindmounts_ro[*]}" \ -b "${bindmounts[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \ "$copydir" \
pacman -Syuu --noconfirm pacman -Syuu --noconfirm
@@ -380,11 +373,11 @@ download_sources
prepare_chroot prepare_chroot
if chroot-run \ if chroot-run \
-r "${bindmounts_ro[*]}" \ -b "${bindmounts[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \ "$copydir" \
/chrootbuild "${makepkg_args[@]}" /chrootbuild "${makepkg_args[@]}"
then then
mapfile -t pkgnames < <(sudo -u "$makepkg_user" bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"')
move_products move_products
else else
(( ret += 1 )) (( ret += 1 ))
@@ -399,6 +392,30 @@ if (( ret != 0 )); then
die "Build failed, check %s/build" "$copydir" die "Build failed, check %s/build" "$copydir"
fi fi
else else
if (( run_checkpkg )); then
msg "Running checkpkg"
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
msg2 "Checking packages"
sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}"
fi
true true
fi fi

View File

@@ -14,7 +14,7 @@
. @libdir@/artools/util-base.sh . @libdir@/artools/util-base.sh
write_attr(){ srcyaml_write_attr(){
local ident1="$1" ident2="$2" ident3="$3" local ident1="$1" ident2="$2" ident3="$3"
local attrname=$4 attrvalues=("${@:5}") local attrname=$4 attrvalues=("${@:5}")
@@ -24,47 +24,41 @@ write_attr(){
attrvalues=("${attrvalues[@]%[[:space:]]}") attrvalues=("${attrvalues[@]%[[:space:]]}")
case $attrname in case $attrname in
makedepends|checkdepends|depends|provides|arch) pkgver|pkgrel|epoch|url|install|changelog)
for v in ${attrvalues[@]};do
Yaml+=$(write_yaml_map $ident3 "$attrname" "$v")
done
;;
*)
Yaml+=$(write_yaml_map $ident1 "$attrname") Yaml+=$(write_yaml_map $ident1 "$attrname")
for v in ${attrvalues[@]};do for v in ${attrvalues[@]};do
Yaml+=$(write_yaml_seq $ident2 "$v") Yaml+=$(write_yaml_seq $ident2 "$v")
done done
;; ;;
*)
for v in ${attrvalues[@]};do
Yaml+=$(write_yaml_map $ident3 "$attrname" "$v")
done
;;
esac esac
} }
extract_info() { pkgbuild_extract_to_yaml() {
local pkgname=$1 attrname=$2 isarray=$3 outvalue= local pkgname=$1 attrname=$2 isarray=$3 outvalue=
if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
[[ -z $pkgname ]] && write_attr 2 4 2 "$attrname" "${outvalue[@]}" [[ -z $pkgname ]] && srcyaml_write_attr 2 4 2 "$attrname" "${outvalue[@]}"
[[ -n $pkgname ]] && write_attr 4 6 2 "$attrname" "${outvalue[@]}" [[ -n $pkgname ]] && srcyaml_write_attr 4 6 2 "$attrname" "${outvalue[@]}"
fi fi
} }
write_details() { srcyaml_write_section_details() {
local attr package_arch a local attr package_arch a
local multivalued_arch_attrs=(provides depends makedepends checkdepends) local multivalued_arch_attrs=(source provides conflicts depends replaces
optdepends makedepends checkdepends)
local singlevalued=() # "${known_hash_algos[@]/%/sums}")
local multivalued=(arch provides depends checkdepends)
if [[ -z "$1" ]];then
singlevalued=(pkgver pkgrel epoch)
multivalued=(arch provides depends makedepends checkdepends)
fi
for attr in "${singlevalued[@]}"; do for attr in "${singlevalued[@]}"; do
extract_info "$1" "$attr" 0 pkgbuild_extract_to_yaml "$1" "$attr" 0
done done
for attr in "${multivalued[@]}"; do for attr in "${multivalued[@]}"; do
extract_info "$1" "$attr" 1 pkgbuild_extract_to_yaml "$1" "$attr" 1
done done
get_pkgbuild_attribute "$1" 'arch' 1 'package_arch' get_pkgbuild_attribute "$1" 'arch' 1 'package_arch'
@@ -73,47 +67,55 @@ write_details() {
[[ $a = any ]] && continue [[ $a = any ]] && continue
for attr in "${multivalued_arch_attrs[@]}"; do for attr in "${multivalued_arch_attrs[@]}"; do
extract_info "$1" "${attr}_$a" 1 pkgbuild_extract_to_yaml "$1" "${attr}_$a" 1
done done
done done
} }
write_pkg_yaml(){ yaml_write_global() {
local singlevalued=(pkgver pkgrel epoch url install changelog) #pkgdesc
Yaml=$(write_yaml_header) local multivalued=(arch groups license checkdepends makedepends
depends provides conflicts replaces)
#noextract options backup optdepends
#source validpgpkeys "${known_hash_algos[@]/%/sums}")
Yaml+=$(write_empty_line) Yaml+=$(write_empty_line)
local full=$(get_full_version)
local ver=${full:-0}
pkgbase=${pkgbase:-${pkgname[0]}}
Yaml+=$(write_yaml_map 0 "pkgbase") Yaml+=$(write_yaml_map 0 "pkgbase")
Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase}") Yaml+=$(write_yaml_map 2 "name" "${pkgbase:-$pkgname}")
${details} && write_details '' ${details} && srcyaml_write_section_details ''
Yaml+=$(write_yaml_map 2 "fullver" "${ver}")
Yaml+=$(write_empty_line) Yaml+=$(write_empty_line)
}
Yaml+=$(write_yaml_map 0 "package") yaml_write_package() {
local singlevalued=(url install changelog) #pkgdesc
local multivalued=(arch groups license checkdepends depends
provides conflicts replaces) #options backup optdepends)
Yaml+=$(write_yaml_map 0 "packages")
for pkg in "${pkgname[@]}"; do for pkg in "${pkgname[@]}"; do
Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg") Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg")
${details} && write_details "$pkg" ${details} && srcyaml_write_section_details "$pkg"
done done
Yaml+=$(write_empty_line) Yaml+=$(write_empty_line)
}
yaml_write_fileinfo(){
local version=$(get_full_version)
Yaml+=$(write_yaml_map 0 "version" "${version:-0}")
Yaml+=$(write_empty_line)
local pkgfile=$(print_all_package_names) local pkgfile=$(print_all_package_names)
Yaml+=$(write_yaml_map 0 "files")
Yaml+=$(write_yaml_map 0 "pkgfile")
for f in ${pkgfile[@]};do for f in ${pkgfile[@]};do
Yaml+=$(write_yaml_seq 2 "${f##*/}") Yaml+=$(write_yaml_seq 2 "${f##*/}")
done done
Yaml+=$(write_empty_line) Yaml+=$(write_empty_line)
}
write_srcyaml(){
Yaml=$(write_yaml_header)
yaml_write_global
yaml_write_package
yaml_write_fileinfo
printf '%s' "${Yaml}" printf '%s' "${Yaml}"
} }
@@ -139,11 +141,13 @@ done
shift $(( $OPTIND - 1 )) shift $(( $OPTIND - 1 ))
[[ -f "$1"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$1" srcpath=$(readlink -f "$1")
PACKAGE="$1"/PKGBUILD; shift
[[ -f "$srcpath"/PKGBUILD ]] || die "%s/PKGBUILD does not exist!" "$srcpath"
PACKAGE="$srcpath"/PKGBUILD; shift
. "$PACKAGE" . "$PACKAGE"
. /etc/makepkg.conf load_makepkg_config
write_pkg_yaml write_srcyaml

46
bin/pkg/signpkg.in Normal file
View File

@@ -0,0 +1,46 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. @libdir@/artools/util-pkg.sh
prepare_artools
load_makepkg_config
passfiles="$@"
sign_pkg(){
local file_to_sign="$1"
if [ ! -e "$file_to_sign" ]; then
error "%s does not exist!" "$file_to_sign"
exit 1
fi
if [[ -n "${BUILDBOT_GPGP}" ]]; then
msg "Signing [%s]" "${file_to_sign##*/}"
gpg --batch --passphrase "${BUILDBOT_GPGP}" --detach-sign "$file_to_sign"
else
msg2 "Signing [%s] with key %s" "${file_to_sign##*/}" "${GPGKEY}..."
gpg --detach-sign --use-agent -u "${GPGKEY}" "$file_to_sign"
fi
}
for pkg in ${passfiles[@]}; do
if pkgfile=$(find_cached_pkgfile "$pkg");then
msg2 "Found: %s" "${pkgfile}"
[[ -e "${pkgfile}".sig ]] && rm "${pkgfile}".sig
sign_pkg "${pkgfile}"
fi
done

View File

@@ -0,0 +1,9 @@
#############################################
################ artools-base ###############
#############################################
# build dir where buildpkg or buildiso chroots are created
# CHROOTS_DIR=/var/lib/artools
# the workspace directory
# WORKSPACE_DIR="/home/${OWNER}/artools-workspace"

View File

@@ -0,0 +1,21 @@
#############################################
################ artools-iso ################
#############################################
# the iso storage directory
# ISO_POOL="${WORKSPACE_DIR}/iso"
# the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit, s6
# INITSYS="openrc"
# gpg key; leave empty or commented to skip img signing
# GPG_KEY=""
# set upload bandwidth limit in kB/s
# UPLIMIT=1000
# the server user
# ACCOUNT=[SetUser]

View File

@@ -1,13 +1,3 @@
#############################################
################ artools-base ###############
#############################################
# build dir where buildpkg or buildiso chroots are created
# CHROOTS_DIR=/var/lib/artools
# the workspace directory
# WORKSPACE_DIR="/home/${OWNER}/artools-workspace"
############################################# #############################################
################ artools-pkg ################ ################ artools-pkg ################
############################################# #############################################
@@ -24,6 +14,8 @@
# packages # packages
# community # community
# packages-kernel # packages-kernel
# packages-net
# packages-gfx
# packages-openrc # packages-openrc
# packages-runit # packages-runit
# packages-s6 # packages-s6
@@ -42,6 +34,7 @@
# packages-mate # packages-mate
# packages-kde # packages-kde
# packages-xfce # packages-xfce
# packages-wm
# ) # )
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit # HOST_TREE_ARCH=git://git.archlinux.org/svntogit
@@ -53,25 +46,3 @@
# default mirror for sogrep # default mirror for sogrep
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos" # REPOS_MIRROR="http://mirror1.artixlinux.org/repos"
#############################################
################ artools-iso ################
#############################################
# the iso storage directory
# ISO_POOL="${WORKSPACE_DIR}/iso"
# the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit, s6
# INITSYS="openrc"
# gpg key; leave empty or commented to skip sfs signing
# GPG_KEY=""
# set upload bandwidth limit in kB/s
# UPLIMIT=1000
# the server user
# ACCOUNT=[SetUser]

View File

@@ -1,5 +0,0 @@
MODULES=(loop dm-snapshot)
HOOKS=(base udev artix_shutdown artix artix_loop_mnt artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs artix_kms modconf block filesystems keyboard keymap)
COMPRESSION="xz"

View File

@@ -132,18 +132,18 @@ DBGSRCDIR="/usr/src/debug"
COMPRESSGZ=(gzip -c -f -n) COMPRESSGZ=(gzip -c -f -n)
COMPRESSBZ2=(bzip2 -c -f) COMPRESSBZ2=(bzip2 -c -f)
COMPRESSXZ=(xz -c -z -) COMPRESSXZ=(xz -c -z -)
COMPRESSZST=(zstd -c -T0 --ultra -20 -)
COMPRESSLRZ=(lrzip -q) COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q) COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f) COMPRESSZ=(compress -c -f)
COMPRESSLZ4=(lz4 -q)
COMPRESSLZ=(lzip -c -f)
######################################################################### #########################################################################
# EXTENSION DEFAULTS # EXTENSION DEFAULTS
######################################################################### #########################################################################
# #
# WARNING: Do NOT modify these variables unless you know what you are PKGEXT='.pkg.tar.zst'
# doing.
#
PKGEXT='.pkg.tar.xz'
SRCEXT='.src.tar.gz' SRCEXT='.src.tar.gz'
# vim: set ft=sh ts=2 sw=2 et: # vim: set ft=sh ts=2 sw=2 et:

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -0,0 +1,111 @@
#
# /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 = usr/share/help/* !usr/share/help/en*
NoExtract = usr/share/gtk-doc/html/* usr/share/doc/*
NoExtract = usr/share/locale/* usr/share/X11/locale/* usr/share/i18n/*
NoExtract = !*locale*/en*/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso*
NoExtract = !usr/share/*locales/trans*
NoExtract = usr/share/man/* usr/share/info/*
NoExtract = usr/share/vim/vim*/lang/*
# Misc options
#UseSyslog
#Color
#TotalDownload
CheckSpace
VerbosePkgLists
# 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 archlinux 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]
Include = /etc/pacman.d/mirrorlist
[world]
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]
#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
#
# ARCHLINUX
#
#[extra]
#Include = /etc/pacman.d/mirrorlist-arch
#[community]
#Include = /etc/pacman.d/mirrorlist-arch
#[multilib]
#Include = /etc/pacman.d/mirrorlist-arch

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -16,10 +16,9 @@
#GPGDir = /etc/pacman.d/gnupg/ #GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/ #HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/curl -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled #CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup

View File

@@ -8,36 +8,36 @@ _mnt_dmsnapshot() {
local ro_dev ro_dev_size rw_dev local ro_dev ro_dev_size rw_dev
ro_dev=$(losetup --find --show --read-only "${img}") ro_dev=$(losetup --find --show --read-only "${img}")
echo ${ro_dev} >> /run/artix/used_block_devices echo ${ro_dev} >> ${live_root}/used_block_devices
ro_dev_size=$(blockdev --getsz ${ro_dev}) ro_dev_size=$(blockdev --getsz ${ro_dev})
if [[ "${cow_persistent}" == "P" ]]; then if [[ "${cow_persistent}" == "P" ]]; then
if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow', using as persistent." msg ":: Found '${cow}/${cow_directory}/${img_name}.cow', using as persistent."
else else
msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as persistent." msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as persistent."
truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow" truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
fi fi
else else
if [[ -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" ]]; then if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '/run/artix/cowspace/${cow_directory}/${img_name}.cow' but non-persistent requested, removing." msg ":: Found '${cow}/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" rm -f "${cow}/${cow_directory}/${img_name}.cow"
fi fi
msg ":: Creating '/run/artix/cowspace/${cow_directory}/${img_name}.cow' as non-persistent." msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as non-persistent."
truncate -s "${cow_spacesize}" "/run/artix/cowspace/${cow_directory}/${img_name}.cow" truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
fi fi
rw_dev=$(losetup --find --show "/run/artix/cowspace/${cow_directory}/${img_name}.cow") rw_dev=$(losetup --find --show "${cow}/${cow_directory}/${img_name}.cow")
echo ${rw_dev} >> /run/artix/used_block_devices echo ${rw_dev} >> ${live_root}/used_block_devices
dmsetup create ${dm_snap_name} --table "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}" dmsetup create ${dm_snap_name} --table "0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}"
if [[ "${cow_persistent}" != "P" ]]; then if [[ "${cow_persistent}" != "P" ]]; then
rm -f "/run/artix/cowspace/${cow_directory}/${img_name}.cow" rm -f "${cow}/${cow_directory}/${img_name}.cow"
fi fi
_mnt_dev "/dev/mapper/${dm_snap_name}" "${mnt}" "-w" "defaults" _mnt_dev "/dev/mapper/${dm_snap_name}" "${mnt}" "-w" "defaults"
echo $(readlink -f /dev/mapper/${dm_snap_name}) >> /run/artix/used_block_devices echo $(readlink -f /dev/mapper/${dm_snap_name}) >> ${live_root}/used_block_devices
} }
# args: source, newroot, mountpoint # args: source, newroot, mountpoint
@@ -45,8 +45,8 @@ _mnt_overlayfs() {
local src="${1}" local src="${1}"
local newroot="${2}" local newroot="${2}"
local mnt="${3}" local mnt="${3}"
local work_dir="/run/artix/overlay_root/work" local work_dir="${overlay_root}/work"
local upper_dir="/run/artix/overlay_root/upper" local upper_dir="${overlay_root}/upper"
mkdir -p "${upper_dir}" "${work_dir}" mkdir -p "${upper_dir}" "${work_dir}"
@@ -63,15 +63,15 @@ _mnt_sfs() {
if [[ "${copytoram}" == "y" ]]; then if [[ "${copytoram}" == "y" ]]; then
msg -n ":: Copying squashfs image to RAM..." msg -n ":: Copying squashfs image to RAM..."
if ! "${oper}" "${img}" "/run/artix/copytoram/${img_fullname}" ; then if ! "${oper}" "${img}" "${cp2ram}/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '/run/artix/copytoram/${img_fullname}'" echo "ERROR: while copy '${img}' to '${cp2ram}/${img_fullname}'"
launch_interactive_shell launch_interactive_shell
fi fi
img="/run/artix/copytoram/${img_fullname}" img="${cp2ram}/${img_fullname}"
msg "done." msg "done."
fi fi
sfs_dev=$(losetup --find --show --read-only "${img}") sfs_dev=$(losetup --find --show --read-only "${img}")
echo ${sfs_dev} >> /run/artix/used_block_devices echo ${sfs_dev} >> ${live_root}/used_block_devices
_mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults" _mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults"
} }
@@ -105,8 +105,8 @@ _mnt_dev() {
_verify_checksum() { _verify_checksum() {
local _status local _status
cd "/run/artix/bootmnt/${artixbasedir}/${arch}" cd "${bootmnt}/${root}"
sha512sum -c $1.sha512 > /tmp/checksum.log 2>&1 sha512sum -c $1.img.sha512 > /tmp/checksum.log 2>&1
_status=$? _status=$?
cd "${OLDPWD}" cd "${OLDPWD}"
return ${_status} return ${_status}
@@ -114,20 +114,19 @@ _verify_checksum() {
_verify_signature() { _verify_signature() {
local _status local _status
cd "/run/artix/bootmnt/${artixbasedir}/${arch}" cd "${bootmnt}/${root}"
gpg --homedir /gpg --status-fd 1 --verify $1.sfs.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG' gpg --homedir /gpg --status-fd 1 --verify $1.img.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
_status=$? _status=$?
cd "${OLDPWD}" cd "${OLDPWD}"
return ${_status} return ${_status}
} }
run_hook() { run_hook() {
[[ -z "${arch}" ]] && arch="$(uname -m)"
[[ -z "${copytoram_size}" ]] && copytoram_size="75%" [[ -z "${copytoram_size}" ]] && copytoram_size="75%"
[[ -z "${artixbasedir}" ]] && artixbasedir="artix" [[ -z "${root}" ]] && root="LiveOS"
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" [[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="artix"
[[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${artixlabel}" [[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${label}"
[[ -z "${cow_spacesize}" ]] && cow_spacesize="256M" [[ -z "${cow_spacesize}" ]] && cow_spacesize="256M"
[[ -z "${overlay_root_size}" ]] && overlay_root_size="75%" [[ -z "${overlay_root_size}" ]] && overlay_root_size="75%"
@@ -141,109 +140,135 @@ run_hook() {
fi fi
[[ -z "${cow_flags}" ]] && cow_flags="defaults" [[ -z "${cow_flags}" ]] && cow_flags="defaults"
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${artixlabel}/${arch}" [[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}"
[[ -z "${cow_chunksize}" ]] && cow_chunksize="8" [[ -z "${cow_chunksize}" ]] && cow_chunksize="8"
[[ -z "${overlay}" ]] && overlay=""
lower_dir=''
live_root="/run/artix"
bootmnt="${live_root}/bootmnt"
overlay_root="${live_root}/overlay_root"
cow="${live_root}/cowspace"
cp2ram="${live_root}/copytoram"
# set mount handler for artix # set mount handler for artix
mount_handler="artix_mount_handler" mount_handler="artix_mount_handler"
} }
_check_sum() {
local fs="${1}"
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
if [[ -f "${bootmnt}/${root}/${fs}.img.md5" ]]; then
msg -n ":: Self-test requested, please wait..."
if _verify_checksum "${fs}"; then
msg "done. Checksum is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
echo "see /tmp/checksum.log for details"
launch_interactive_shell
fi
else
echo "ERROR: checksum=y option specified but ${root}/${fs}.img.md5 not found"
launch_interactive_shell
fi
fi
}
_check_sig() {
local fs="${1}"
if [[ -f "${bootmnt}/${root}/${fs}.img" ]]; then
if [[ -f "${bootmnt}/${root}/${fs}.img.sig" ]]; then
msg -n ":: Signature verification requested, please wait..."
if _verify_signature "${fs}"; then
msg "done. Signature is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
launch_interactive_shell
fi
else
echo "ERROR: verify=y option specified but ${root}/${fs}.img.sig not found"
launch_interactive_shell
fi
fi
}
_gen_arg() {
local arg="${1}"
echo "${lower_dir:-}${lower_dir:+:}${arg}"
}
_mount_root_overlayfs() {
local sfs="${1}"
local src="${bootmnt}/${root}"
local dest_sfs="${live_root}/sfs"
local dest_img="${live_root}/img"
if [[ -f "${src}/${sfs}.img" ]]; then
_mnt_sfs "${src}/${sfs}.img" "${dest_sfs}/${sfs}"
local find_img="${dest_sfs}/${sfs}/LiveOS/${sfs}.img"
if [[ -f "${find_img}" ]]; then
mkdir -p ${dest_img}
lower_dir=$(_gen_arg "${dest_img}/${sfs}")
_mnt_dmsnapshot "${find_img}" "${dest_img}/${sfs}"
else
lower_dir=$(_gen_arg "${dest_sfs}/${sfs}")
fi
fi
}
# This function is called normally from init script, but it can be called # This function is called normally from init script, but it can be called
# as chain from other mount handlers. # as chain from other mount handlers.
# args: /path/to/newroot # args: /path/to/newroot
artix_mount_handler() { artix_mount_handler() {
local newroot="${1}" local newroot="${1}"
if ! mountpoint -q "/run/artix/bootmnt"; then if ! mountpoint -q "${bootmnt}"; then
_mnt_dev "${artixdevice}" "/run/artix/bootmnt" "-r" "defaults" _mnt_dev "${artixdevice}" "${bootmnt}" "-r" "defaults"
if [[ "${copytoram}" != "y" ]]; then if [[ "${copytoram}" != "y" ]]; then
echo $(readlink -f ${artixdevice}) >> /run/artix/used_block_devices echo $(readlink -f ${artixdevice}) >> ${live_root}/used_block_devices
fi fi
fi fi
if [[ "${checksum}" == "y" ]]; then if [[ "${checksum}" == "y" ]]; then
for fs in rootfs livefs;do _check_sum "rootfs"
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then [[ -n "${overlay}" ]] && _check_sum "${overlay}"
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then
msg -n ":: Self-test requested, please wait..."
if _verify_checksum "${fs}"; then
msg "done. Checksum is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
echo "see /tmp/checksum.log for details"
launch_interactive_shell
fi
else
echo "ERROR: checksum=y option specified but ${artixbasedir}/${arch}/${fs}.sha512 not found"
launch_interactive_shell
fi
fi
done
fi fi
if [[ "${verify}" == "y" ]]; then if [[ "${verify}" == "y" ]]; then
for fs in rootfs livefs;do _check_sig "rootfs"
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs" ]]; then [[ -n "${overlay}" ]] && _check_sig "${overlay}"
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then
msg -n ":: Signature verification requested, please wait..."
if _verify_signature "${fs}"; then
msg "done. Signature is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
launch_interactive_shell
fi
else
echo "ERROR: verify=y option specified but ${artixbasedir}/${arch}/${fs}.sfs.sig not found"
launch_interactive_shell
fi
fi
done
fi fi
if [[ "${copytoram}" == "y" ]]; then if [[ "${copytoram}" == "y" ]]; then
msg ":: Mounting /run/artix/copytoram (tmpfs) filesystem, size=${copytoram_size}" msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
mkdir -p /run/artix/copytoram mkdir -p ${cp2ram}
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/artix/copytoram mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram ${cp2ram}
fi fi
if [[ -n "${cow_device}" ]]; then if [[ -n "${cow_device}" ]]; then
_mnt_dev "${cow_device}" "/run/artix/cowspace" "-r" "${cow_flags}" _mnt_dev "${cow_device}" "${cow}" "-r" "${cow_flags}"
echo $(readlink -f ${cow_device}) >> /run/artix/used_block_devices echo $(readlink -f ${cow_device}) >> ${live_root}/used_block_devices
mount -o remount,rw "/run/artix/cowspace" mount -o remount,rw "${cow}"
else else
msg ":: Mounting /run/artix/cowspace (tmpfs) filesystem, size=${cow_spacesize}..." msg ":: Mounting ${cow} (tmpfs) filesystem, size=${cow_spacesize}..."
mkdir -p /run/artix/cowspace mkdir -p ${cow}
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/artix/cowspace mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace ${cow}
fi fi
mkdir -p -m 0700 "/run/artix/cowspace/${cow_directory}" mkdir -p -m 0700 "${cow}/${cow_directory}"
msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..." msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..."
mkdir -p /run/artix/overlay_root mkdir -p ${overlay_root}
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root /run/artix/overlay_root mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
local src="/run/artix/bootmnt/${artixbasedir}/${arch}" [[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img" _mount_root_overlayfs "rootfs"
local lower_dir
for sfs in livefs rootfs;do
if [[ -f "${src}/${sfs}.sfs" ]]; then
_mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}"
if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then
mkdir -p ${dest_img}
lower_dir=${lower_dir:-}${lower_dir:+:}"${dest_img}/${sfs}"
_mnt_dmsnapshot "${dest_sfs}/${sfs}/${sfs}.img" "${dest_img}/${sfs}"
else
lower_dir=${lower_dir:-}${lower_dir:+:}"${dest_sfs}/${sfs}"
fi
fi
done
_mnt_overlayfs "${lower_dir}" "${newroot}" "/" _mnt_overlayfs "${lower_dir}" "${newroot}" "/"
if [[ "${copytoram}" == "y" ]]; then if [[ "${copytoram}" == "y" ]]; then
umount -d /run/artix/bootmnt umount -d ${bootmnt}
mkdir -p /run/artix/bootmnt/${artixbasedir}/${arch} mkdir -p ${bootmnt}/${root}
mount -o bind /run/artix/copytoram /run/artix/bootmnt/${artixbasedir}/${arch} mount -o bind ${cp2ram} ${bootmnt}/${root}
fi fi
} }

View File

@@ -14,15 +14,15 @@ artix_loop_mount_handler () {
local _dev_loop local _dev_loop
msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}" msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}"
_mnt_dev "${img_dev}" "/run/artix/img_dev" "-r" "${img_flags}" _mnt_dev "${img_dev}" "${live_root}/img_dev" "-r" "${img_flags}"
if [[ "${copytoram}" != "y" ]]; then if [[ "${copytoram}" != "y" ]]; then
echo $(readlink -f ${img_dev}) >> /run/artix/used_block_devices echo $(readlink -f ${img_dev}) >> ${live_root}/used_block_devices
fi fi
if _dev_loop=$(losetup --find --show --read-only "/run/artix/img_dev/${img_loop}"); then if _dev_loop=$(losetup --find --show --read-only "${live_root}/img_dev/${img_loop}"); then
artixdevice="${_dev_loop}" artixdevice="${_dev_loop}"
else else
echo "ERROR: Setting loopback device for file '/run/artix/img_dev/${img_loop}'" echo "ERROR: Setting loopback device for file '${live_root}/img_dev/${img_loop}'"
launch_interactive_shell launch_interactive_shell
fi fi
@@ -30,6 +30,6 @@ artix_loop_mount_handler () {
if [[ "${copytoram}" == "y" ]]; then if [[ "${copytoram}" == "y" ]]; then
losetup -d ${_dev_loop} 2>/dev/null losetup -d ${_dev_loop} 2>/dev/null
umount /run/artix/img_dev umount ${live_root}/img_dev
fi fi
} }

View File

@@ -17,13 +17,13 @@ run_hook() {
# Fetch a file with CURL # Fetch a file with CURL
# #
# $1 URL # $1 URL
# $2 Destination directory inside httpspace/${artixbasedir} # $2 Destination directory inside httpspace/${root}
_curl_get() { _curl_get() {
local _url="${1}" local _url="${1}"
local _dst="${2}" local _dst="${2}"
msg ":: Downloading '${_url}'" msg ":: Downloading '${_url}'"
if ! curl -L -f -o "/run/artix/httpspace/${artixbasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then if ! curl -L -f -o "${live_root}/httpspace/${root}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
echo "ERROR: Downloading '${_url}'" echo "ERROR: Downloading '${_url}'"
echo " Falling back to interactive prompt" echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished" echo " You can try to fix the problem manually, log out when you are finished"
@@ -31,29 +31,33 @@ _curl_get() {
fi fi
} }
_get_sfs() {
local _sfs="${2}"
local _src=${artix_http_srv}${root}
if [[ ! -z "$( curl -s --head "${_src}/${_sfs}.img" | grep "OK" )" ]]; then
_curl_get "${_src}/${_sfs}.img" "/"
if [[ "${checksum}" == "y" ]]; then
_curl_get "${_src}/${_sfs}.md5" "/"
fi
if [[ "${verify}" == "y" ]]; then
_curl_get "${_src}/${_sfs}.img.sig" "/"
fi
fi
}
artix_pxe_http_mount_handler () { artix_pxe_http_mount_handler () {
newroot="${1}" newroot="${1}"
msg ":: Mounting /run/artix/httpspace (tmpfs) filesystem, size='${artix_http_spc}'" msg ":: Mounting ${live_root}/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
mkdir -p "/run/artix/httpspace" mkdir -p "${live_root}/httpspace"
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "/run/artix/httpspace" mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "${live_root}/httpspace"
local _src=${artix_http_srv}${artixbasedir}/${arch} _get_sfs "rootfs"
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
for sfs in livefs rootfs;do mkdir -p "${bootmnt}"
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then mount -o bind ${live_root}/httpspace ${bootmnt}
_curl_get "${_src}/${sfs}.sfs" "/${arch}"
if [[ "${checksum}" == "y" ]]; then
_curl_get "${_src}/${sfs}.md5" "/${arch}"
fi
if [[ "${verify}" == "y" ]]; then
_curl_get "${_src}/${sfs}.sfs.sig" "/${arch}"
fi
fi
done
mkdir -p "/run/artix/bootmnt"
mount -o bind /run/artix/httpspace /run/artix/bootmnt
artix_mount_handler ${newroot} artix_mount_handler ${newroot}
} }

View File

@@ -12,10 +12,10 @@ run_hook() {
artix_nfs_mount_handler() { artix_nfs_mount_handler() {
newroot="${1}" newroot="${1}"
mkdir -p "/run/artix/bootmnt" mkdir -p "${bootmnt}"
msg ":: Mounting '${artix_nfs_srv}'" msg ":: Mounting '${artix_nfs_srv}'"
# Do not put "${artix_nfs_opt}" nfsmount fails! # Do not put "${artix_nfs_opt}" nfsmount fails!
if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "/run/artix/bootmnt"; then if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "${bootmnt}"; then
echo "ERROR: Mounting '${artix_nfs_srv}'" echo "ERROR: Mounting '${artix_nfs_srv}'"
echo " Falling back to interactive prompt" echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished" echo " You can try to fix the problem manually, log out when you are finished"

View File

@@ -5,8 +5,7 @@ mkdir /oldrun
mount -n --move /oldroot/run /oldrun mount -n --move /oldroot/run /oldrun
# Unmount all mounts now. # Unmount all mounts now.
#umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)
umount $(mount | awk '$3 ~/^\/oldroot/ {if($3 != "/run/artix/bootmnt") print $3}' | sort -r)
# Remove all dm-snapshot devices. # Remove all dm-snapshot devices.
dmsetup remove_all dmsetup remove_all
@@ -26,7 +25,7 @@ if [[ ! -d /oldrun/artix/copytoram ]]; then
if [[ -d /oldrun/artix/img_dev ]]; then if [[ -d /oldrun/artix/img_dev ]]; then
umount /oldrun/artix/img_dev umount /oldrun/artix/img_dev
else else
umount /oldrun/artix/bootmnt umount /oldrun/bootmnt
fi fi
fi fi

View File

@@ -15,7 +15,7 @@
# export LC_MESSAGES=C # export LC_MESSAGES=C
export LANG=C export LANG=C
if [[ -t 2 ]]; then if [[ -t 2 && "$TERM" != dumb ]]; then
colorize colorize
else else
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW='' declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''

View File

@@ -25,158 +25,15 @@ show_elapsed_time(){
info "Time %s: %s minutes" "$1" "$(elapsed_time $2)" info "Time %s: %s minutes" "$1" "$(elapsed_time $2)"
} }
load_vars() {
local var
[[ -f $1 ]] || return 1
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do
[[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")"
done
return 0
}
prepare_dir(){ prepare_dir(){
[[ ! -d $1 ]] && mkdir -p $1 [[ ! -d $1 ]] && mkdir -p $1
} }
get_disturl(){
. /usr/lib/os-release
echo "${HOME_URL}"
}
get_osname(){ get_osname(){
. /usr/lib/os-release . /usr/lib/os-release
echo "${NAME}" echo "${NAME}"
} }
init_artools_base(){
ARCH=$(uname -m)
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
prepare_dir "${WORKSPACE_DIR}"
}
init_artools_pkg(){
DOMAIN='artixlinux.org'
GIT_DOMAIN="gitea.${DOMAIN}"
GIT_URL="https://${GIT_DOMAIN}"
GIT_TOKEN=${GIT_TOKEN:-''}
TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"}
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
TREE_NAMES_ARTIX=(
packages
community
packages-kernel
packages-openrc
packages-runit
packages-xorg
packages-python
packages-perl
packages-java
packages-qt5
packages-devel
packages-ruby
packages-gtk
packages-gnome
packages-cinnamon
packages-lxqt
packages-mate
packages-kde
packages-xfce
# packages-haskell
)
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"}
TREE_NAMES_ARCH=(packages community)
HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'}
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
DBEXT=${DBEXT:-'xz'}
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
}
init_artools_iso(){
CHROOTS_ISO="${CHROOTS_DIR}/buildiso"
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
prepare_dir "${ISO_POOL}"
PROFILE='base'
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
INITSYS=${INITSYS:-'openrc'}
GPG_KEY=${GPG_KEY:-''}
UPLIMIT=${UPLIMIT:-1000}
FILE_HOST="download.${DOMAIN}"
FILE_HOME=${FILE_HOME:-'/srv/iso'}
FILE_PORT=${FILE_PORT:-65432}
ACCOUNT=${ACCOUNT:-'naughtyISOuploader'}
}
load_config(){
local conf="$1"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
init_artools_base
init_artools_pkg
init_artools_iso
return 0
}
load_user_info(){
OWNER=${SUDO_USER:-$USER}
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
prepare_dir "${USERCONFDIR}"
USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
}
# orig_argv=("$0" "$@") # orig_argv=("$0" "$@")
check_root() { check_root() {
local keepenv=$1 local keepenv=$1

View File

@@ -12,29 +12,44 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
add_svc_rc(){ add_svc_openrc(){
local mnt="$1" name="$2" rlvl="$3" local mnt="$1" names="$2" rlvl="${3:-default}"
if [[ -f $mnt/etc/init.d/$name ]];then for svc in $names; do
msg2 "Setting %s ..." "$name" if [[ -f $mnt/etc/init.d/$svc ]];then
chroot $mnt rc-update add $name $rlvl &>/dev/null msg2 "Setting %s ..." "$svc"
fi [[ $svc == "xdm" ]] && set_xdm "$mnt"
chroot $mnt rc-update add $svc $rlvl &>/dev/null
fi
done
} }
add_svc_runit(){ add_svc_runit(){
local mnt="$1" name="$2" local mnt="$1" names="$2" rlvl="${3:-default}"
if [[ -d $mnt/etc/runit/sv/$name ]]; then for svc in $names; do
msg2 "Setting %s ..." "$name" if [[ -d $mnt/etc/runit/sv/$svc ]]; then
chroot $mnt ln -s /etc/runit/sv/$name /etc/runit/runsvdir/default &>/dev/null msg2 "Setting %s ..." "$svc"
fi chroot $mnt ln -s /etc/runit/sv/$svc /etc/runit/runsvdir/$rlvl &>/dev/null
fi
done
} }
add_svc_s6(){ add_svc_s6(){
local mnt="$1" name="$2" local mnt="$1" names="$2" valid="" rlvl="${3:-default}"
if [[ -d $mnt/etc/s6/sv/$name ]]; then for svc in $names; do
msg2 "Setting %s ..." "$name" error=false
# chroot $mnt s6-rc-bundle $name default &>/dev/null chroot $mnt s6-rc-db -c /etc/s6/rc/compiled type $svc &> /dev/null || error=true
# chroot $mnt s6-rc -u change default &>/dev/null if [ $? == 0 ] && [[ $error == false ]]; then
fi msg2 "Setting %s ..." "$svc"
valid=${valid:-}${valid:+' '}${svc}
fi
done
chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid
# rebuild s6-linux-init binaries
chroot $mnt rm -r /etc/s6/current
chroot $mnt s6-linux-init-maker -1 -N -f /etc/s6/skel -G "/usr/bin/agetty -L -8 tty1 115200" -c /etc/s6/current /etc/s6/current
chroot $mnt mv /etc/s6/current/bin/init /etc/s6/current/bin/s6-init
chroot $mnt cp -a /etc/s6/current/bin /usr
} }
set_xdm(){ set_xdm(){
@@ -60,50 +75,19 @@ configure_logind(){
configure_services(){ configure_services(){
local mnt="$1" local mnt="$1"
info "Configuring [%s]" "${INITSYS}" info "Configuring [%s] services" "${INITSYS}"
case ${INITSYS} in add_svc_${INITSYS} "$mnt" "${SERVICES[*]} ${SERVICES_LIVE[*]}"
'openrc') info "Done configuring [%s] services" "${INITSYS}"
for svc in ${SERVICES[@]}; do
[[ $svc == "xdm" ]] && set_xdm "$mnt"
add_svc_rc "$mnt" "$svc" "default"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_rc "$mnt" "$svc" "default"
done
;;
'runit')
for svc in ${SERVICES[@]}; do
add_svc_runit "$mnt" "$svc"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_runit "$mnt" "$svc"
done
;;
's6')
for svc in ${SERVICES[@]}; do
add_svc_s6 "$mnt" "$svc"
done
for svc in ${SERVICES_LIVE[@]}; do
add_svc_s6 "$mnt" "$svc"
done
;;
esac
info "Done configuring [%s]" "${INITSYS}"
} }
configure_system(){ configure_system(){
local mnt="$1" local mnt="$1"
case ${INITSYS} in configure_logind "$mnt" "elogind"
'openrc' | 'runit'|'s6')
configure_logind "$mnt" "elogind"
;;
esac
echo ${HOST_NAME} > $mnt/etc/hostname echo ${HOST_NAME} > $mnt/etc/hostname
} }
write_users_conf(){ write_users_conf(){
local yaml=$(write_yaml_header) local yaml=$(write_yaml_header)
yaml+=$(write_empty_line)
yaml+=$(write_yaml_map 0 'defaultGroups') yaml+=$(write_yaml_map 0 'defaultGroups')
local IFS=',' local IFS=','
for g in ${ADDGROUPS[@]};do for g in ${ADDGROUPS[@]};do
@@ -125,50 +109,55 @@ write_users_conf(){
printf '%s' "${yaml}" printf '%s' "${yaml}"
} }
write_servicescfg_conf(){ write_services_conf(){
local key1="$1" val1="$2" key2="$3" val2="$4"
local yaml=$(write_yaml_header) local yaml=$(write_yaml_header)
yaml+=$(write_empty_line) yaml+=$(write_yaml_map 0 "$key1" "$val1")
case "${INITSYS}" in yaml+=$(write_yaml_map 0 "$key2" "$val2")
'runit') yaml+=$(write_yaml_map 0 'services')
yaml+=$(write_yaml_map 0 'svDir' '/etc/runit/sv') for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_map 0 'runsvDir' '/etc/runit/runsvdir') yaml+=$(write_yaml_seq 2 "$svc")
yaml+=$(write_yaml_map 0 'services') done
yaml+=$(write_yaml_map 2 'enabled')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 4 'name' "$svc")
yaml+=$(write_yaml_map 6 'runlevel' 'default')
done
;;
'openrc')
yaml+=$(write_yaml_map 0 'initdDir' '/etc/init.d')
yaml+=$(write_yaml_map 0 'runlevelsDir' '/etc/runlevels')
yaml+=$(write_yaml_map 0 'services')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 2 'name' "$svc")
yaml+=$(write_yaml_map 4 'runlevel' 'default')
done
;;
's6')
yaml+=$(write_yaml_map 0 'svDir' '/etc/s6/sv')
yaml+=$(write_yaml_map 0 'rcDir' '/etc/s6-rc')
yaml+=$(write_yaml_map 0 'services')
for svc in ${SERVICES[@]};do
yaml+=$(write_yaml_seq_map 2 'name' "$svc")
yaml+=$(write_yaml_map 4 'bundle' 'default')
done
;;
esac
yaml+=$(write_empty_line) yaml+=$(write_empty_line)
printf '%s' "${yaml}" printf '%s' "${yaml}"
} }
write_unpackfs_conf(){ write_services_openrc_conf(){
local conf="$1"/services-openrc.conf
write_services_conf 'initdDir' '/etc/init.d' 'runlevelsDir' '/etc/runlevels' > "$conf"
}
write_services_runit_conf(){
local conf="$1"/services-runit.conf
write_services_conf 'svDir' '/etc/runit/sv' 'runsvDir' '/etc/runit/runsvdir' > "$conf"
}
write_services_s6_conf(){
local conf="$1"/services-s6.conf
write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf"
}
write_postcfg(){
local yaml=$(write_yaml_header) local yaml=$(write_yaml_header)
yaml+=$(write_yaml_map 0 'keyrings')
for k in archlinux artix;do
yaml+=$(write_yaml_seq 2 "$k")
done
yaml+=$(write_empty_line) yaml+=$(write_empty_line)
printf '%s' "${yaml}"
}
write_unpackfs() {
local yaml=$(write_yaml_header)
yaml+=$(write_yaml_map 0 'unpack') yaml+=$(write_yaml_map 0 'unpack')
yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs") # if ${persist}; then
yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs') # yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/bootmnt/LiveOS/rootfs.img"')
yaml+=$(write_yaml_map 4 'destination' '') # yaml+=$(write_yaml_map 4 'sourcefs' '"ext4"')
# else
yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/bootmnt/LiveOS/rootfs.img"')
yaml+=$(write_yaml_map 4 'sourcefs' '"squashfs"')
# fi
yaml+=$(write_yaml_map 4 'destination' '""')
yaml+=$(write_empty_line) yaml+=$(write_empty_line)
printf '%s' "${yaml}" printf '%s' "${yaml}"
} }
@@ -178,14 +167,15 @@ configure_calamares(){
if [[ -d "$mods" ]];then if [[ -d "$mods" ]];then
msg2 "Configuring Calamares" msg2 "Configuring Calamares"
write_users_conf > "$mods"/users.conf write_users_conf > "$mods"/users.conf
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf write_services_"${INITSYS}"_conf "$mods"
write_unpackfs_conf > "$mods"/unpackfs.conf write_postcfg > "$mods"/postcfg.conf
sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf write_unpackfs > "$mods"/unpackfs.conf
sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf sed -e "s|services-openrc|services-${INITSYS}|" \
-i "$1"/etc/calamares/settings.conf
fi fi
} }
configure_image(){ configure_chroot(){
local fs="$1" local fs="$1"
msg "Configuring [%s]" "${fs##*/}" msg "Configuring [%s]" "${fs##*/}"
configure_hosts "$fs" configure_hosts "$fs"
@@ -193,6 +183,44 @@ configure_image(){
configure_services "$fs" configure_services "$fs"
configure_calamares "$fs" configure_calamares "$fs"
[[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools" [[ ! -d "$fs/etc/artools" ]] && mkdir -p "$fs/etc/artools"
msg2 "Writing live.conf"
write_live_session_conf > "$fs/etc/artools/live.conf" write_live_session_conf > "$fs/etc/artools/live.conf"
msg "Done configuring [%s]" "${fs##*/}" msg "Done configuring [%s]" "${fs##*/}"
} }
clean_up_chroot(){
local path mnt="$1"
msg2 "Cleaning [%s]" "${mnt##*/}"
path=$mnt/boot
if [[ -d "$path" ]]; then
find "$path" -name 'initramfs*.img' -delete &> /dev/null
fi
path=$mnt/var/lib/pacman/sync
if [[ -d $path ]];then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/cache/pacman/pkg
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/log
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
path=$mnt/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
rm $mnt/boot/grub/grub.cfg
fi
if [[ -f "$mnt/etc/machine-id" ]]; then
rm $mnt/etc/machine-id
fi
}

View File

@@ -12,42 +12,8 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
prepare_initcpio(){
msg2 "Copying initcpio ..."
local dest="$1"
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
}
prepare_initramfs(){
local mnt="$1"
cp ${DATADIR}/mkinitcpio.conf $mnt/etc/mkinitcpio-artix.conf
if [[ "${PROFILE}" != 'base' ]];then
sed -e 's/artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs //' -i $mnt/etc/mkinitcpio-artix.conf
fi
if [[ -n ${GPG_KEY} ]]; then
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY
fi
local _kernel=$(cat $mnt/usr/lib/modules/*/version)
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \
/usr/bin/mkinitcpio -k ${_kernel} \
-c /etc/mkinitcpio-artix.conf \
-g /boot/initramfs.img
if [[ -n ${GPG_KEY} ]]; then
exec 17<&-
fi
if [[ -f /tmp/GPG_KEY ]]; then
rm /tmp/GPG_KEY
fi
}
prepare_boot_extras(){ prepare_boot_extras(){
local src="$1" dest="$2" local src="$1" dest=${iso_root}/boot
for u in intel amd;do for u in intel amd;do
cp $src/boot/$u-ucode.img $dest/$u-ucode.img cp $src/boot/$u-ucode.img $dest/$u-ucode.img
@@ -58,18 +24,121 @@ prepare_boot_extras(){
cp $src/usr/share/licenses/common/GPL2/license.txt $dest/memtest.COPYING cp $src/usr/share/licenses/common/GPL2/license.txt $dest/memtest.COPYING
} }
##################dracut##################
prepare_initramfs_dracut(){
local mnt="$1"
local kver=$(<"$mnt"/usr/src/linux/version)
printf "%s\n" 'add_dracutmodules+=" dmsquash-live"' > "$mnt"/etc/dracut.conf.d/50-live.conf
msg "Starting build: %s" "${kver}"
artools-chroot "$mnt" dracut -fqM /boot/initramfs.img "$kver"
msg "Image generation successful"
cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${ARCH}".img
prepare_boot_extras "$mnt"
}
configure_grub_dracut(){
msg "Configuring grub kernel options ..."
local kopts=(
"root=live:LABEL=${iso_label}"
'rd.live.squashimg=rootfs.img'
'rd.live.image'
'rootflags=auto'
)
[[ "${PROFILE}" != 'base' ]] && kopts+=("rd.live.join=livefs.img")
local ro_opts=()
local rw_opts=()
# 'rd.writable.fsimg=1'
sed -e "s|@kopts@|${kopts[*]}|" \
-e "s|@ro_opts@|${ro_opts[*]}|" \
-e "s|@rw_opts@|${rw_opts[*]}|" \
-i ${iso_root}/boot/grub/kernels.cfg
}
#############################################
write_mkinitcpio_conf() {
msg2 "Writing mkinitcpio.conf ..."
local conf="$1/etc/mkinitcpio-artix.conf"
printf "%s\n" 'MODULES=(loop dm-snapshot)' > $conf
printf "%s\n" 'COMPRESSION="xz"' >> $conf
if [[ "${PROFILE}" == 'base' ]];then
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt
artix_pxe_common artix_pxe_http artix_pxe_nbd artix_pxe_nfs
artix_kms modconf block filesystems keyboard keymap)' >> $conf
else
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt
artix_kms modconf block filesystems keyboard keymap)' >> $conf
fi
}
prepare_initcpio(){
msg2 "Copying initcpio ..."
local dest="$1"
cp /etc/initcpio/hooks/artix* $dest/etc/initcpio/hooks
cp /etc/initcpio/install/artix* $dest/etc/initcpio/install
cp /etc/initcpio/artix_shutdown $dest/etc/initcpio
}
prepare_initramfs(){
local mnt="$1"
prepare_initcpio "$mnt"
write_mkinitcpio_conf "$mnt"
if [[ -n ${GPG_KEY} ]]; then
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY
fi
local _kernel=$(<"$mnt"/usr/src/linux/version)
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot "$mnt" \
/usr/bin/mkinitcpio -k ${_kernel} \
-c /etc/mkinitcpio-artix.conf \
-g /boot/initramfs.img
if [[ -n ${GPG_KEY} ]]; then
exec 17<&-
fi
if [[ -f /tmp/GPG_KEY ]]; then
rm /tmp/GPG_KEY
fi
cp $mnt/boot/initramfs.img ${iso_root}/boot/initramfs-${ARCH}.img
prepare_boot_extras "$mnt"
}
configure_grub(){ configure_grub(){
sed -e "s|@iso_label@|${iso_label}|" -i ${iso_root}/boot/grub/kernels.cfg msg "Configuring grub kernel options ..."
local ro_opts=()
local rw_opts=()
local kopts=("label=${iso_label}")
[[ "${PROFILE}" != 'base' ]] && kopts+=('overlay=livefs')
sed -e "s|@kopts@|${kopts[*]}|" \
-e "s|@ro_opts@|${ro_opts[*]}|" \
-e "s|@rw_opts@|${rw_opts[*]}|" \
-i ${iso_root}/boot/grub/kernels.cfg
} }
prepare_grub(){ prepare_grub(){
local platform=i386-pc img='core.img' prefix=/boot/grub local platform=i386-pc img='core.img' prefix=/boot/grub
local lib=$1/usr/lib/grub theme=$2/usr/share/grub local lib="$1"/usr/lib/grub
local theme="$1"/usr/share/grub
local livecfg="$2"/usr/share/grub
local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot local grub=${iso_root}/boot/grub efi=${iso_root}/efi/boot
prepare_dir ${grub}/${platform} prepare_dir ${grub}/${platform}
cp ${theme}/cfg/*.cfg ${grub} cp ${livecfg}/cfg/*.cfg ${grub}
cp ${lib}/${platform}/* ${grub}/${platform} cp ${lib}/${platform}/* ${grub}/${platform}
@@ -92,8 +161,9 @@ prepare_grub(){
grub-mkimage -d ${grub}/${platform} -o ${efi}/${img} -O ${platform} -p ${prefix} iso9660 grub-mkimage -d ${grub}/${platform} -o ${efi}/${img} -O ${platform} -p ${prefix} iso9660
prepare_dir ${grub}/themes prepare_dir ${grub}/themes
cp -r ${theme}/themes/artix ${grub}/themes/
cp -r ${theme}/{locales,tz} ${grub} cp -r ${theme}/themes/artix ${grub}/themes
cp -r ${livecfg}/{locales,tz} ${grub}
if [[ -f /usr/share/grub/unicode.pf2 ]];then if [[ -f /usr/share/grub/unicode.pf2 ]];then
msg2 "Copying %s ..." "unicode.pf2" msg2 "Copying %s ..." "unicode.pf2"
@@ -103,7 +173,7 @@ prepare_grub(){
grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf grub-mkfont -o ${grub}/unicode.pf2 /usr/share/fonts/misc/unifont.bdf
fi fi
local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/efi.img" local size=4M mnt="${mnt_dir}/efiboot" efi_img="${iso_root}/boot/efi.img"
msg2 "Creating fat image of %s ..." "${size}" msg2 "Creating fat image of %s ..." "${size}"
truncate -s ${size} "${efi_img}" truncate -s ${size} "${efi_img}"
mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null mkfs.fat -n ARTIX_EFI "${efi_img}" &>/dev/null

View File

@@ -13,100 +13,119 @@
# GNU General Public License for more details. # GNU General Public License for more details.
make_sig () { make_sig () {
local idir="$1" file="$2" local file="$1"
msg2 "Creating signature file..." msg2 "Creating signature file..."
cd "$idir" cd ${iso_root}${live_dir}
chown "${OWNER}:$(id --group ${OWNER})" "$idir" chown "${OWNER}:$(id --group ${OWNER})" "${iso_root}${live_dir}"
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs" su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file"
chown -R root "$idir" chown -R root "${iso_root}${live_dir}"
cd ${OLDPWD} cd ${OLDPWD}
} }
make_checksum(){ make_checksum(){
local idir="$1" file="$2" local file="$1"
msg2 "Creating sha512sum ..." msg2 "Creating md5sum ..."
cd $idir cd ${iso_root}${live_dir}
sha512sum $file.sfs > $file.sha512 md5sum $file > $file.md5
cd ${OLDPWD} cd ${OLDPWD}
} }
make_ext_img(){
local src="$1"
local size=32G
local mnt="${mnt_dir}/${src##*/}"
mkdir -p ${work_dir}/embed${live_dir}
local extimg=${work_dir}/embed${live_dir}/${src##*/}.img
msg2 "Creating ext4 image of %s ..." "${size}"
truncate -s ${size} "${extimg}"
local ext4_args=()
ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0)
mkfs.ext4 ${ext4_args[@]} -F "${extimg}" &>/dev/null
tune2fs -c 0 -i 0 "${extimg}" &> /dev/null
mount_img "${extimg}" "${mnt}"
msg2 "Copying %s ..." "${src}/"
cp -aT "${src}/" "${mnt}/"
umount_img "${mnt}"
}
has_changed(){
local src="$1" dest="$2"
if [[ -f "${dest}" ]]; then
local has_changes=$(find ${src} -newer ${dest})
if [[ -n "${has_changes}" ]]; then
msg2 "Possible changes for %s ..." "${src}"
msg2 "%s" "${has_changes}"
msg2 "SquashFS image %s is not up to date, rebuilding..." "${dest}"
rm "${dest}"
else
msg2 "SquashFS image %s is up to date, skipping." "${dest}"
return 1
fi
fi
}
# $1: image path # $1: image path
make_sfs() { make_sfs() {
local src="$1" local sfs_in="$1"
if [[ ! -e "${src}" ]]; then if [[ ! -e "${sfs_in}" ]]; then
error "The path %s does not exist" "${src}" error "The path %s does not exist" "${sfs_in}"
retrun 1 retrun 1
fi fi
local timer=$(get_timer) dest=${iso_root}/artix/${ARCH}
local name=${1##*/} mkdir -p ${iso_root}${live_dir}
local sfs="${dest}/${name}.sfs"
mkdir -p ${dest} local img_name=${sfs_in##*/}.img
msg "Generating SquashFS image for %s" "${src}" local img_file=${sfs_in}.img
if [[ -f "${sfs}" ]]; then
local has_changed_dir=$(find ${src} -newer ${sfs}) local sfs_out="${iso_root}${live_dir}/${img_name}"
msg2 "Possible changes for %s ..." "${src}" >> /tmp/buildiso.debug
msg2 "%s" "${has_changed_dir}" >> /tmp/buildiso.debug if has_changed "${sfs_in}" "${sfs_out}"; then
if [[ -n "${has_changed_dir}" ]]; then
msg2 "SquashFS image %s is not up to date, rebuilding..." "${sfs}" msg "Generating SquashFS image for %s" "${sfs_in}"
rm "${sfs}"
local mksfs_args=()
if ${persist};then
make_ext_img "${sfs_in}"
mksfs_args+=("${work_dir}/embed")
else else
msg2 "SquashFS image %s is up to date, skipping." "${sfs}" mksfs_args+=("${sfs_in}")
return
fi fi
mksfs_args+=("${sfs_out}")
mksfs_args+=(-comp xz -b 256K -Xbcj x86 -noappend)
mksquashfs "${mksfs_args[@]}"
if ! ${use_dracut}; then
make_checksum "${img_name}"
if [[ -n ${GPG_KEY} ]];then
make_sig "${img_name}"
fi
fi
${persist} && rm -r "${work_dir}/embed"
fi fi
}
if ${persist};then get_disturl(){
local size=32G . /usr/lib/os-release
local mnt="${mnt_dir}/${name}" echo "${HOME_URL}"
msg2 "Creating ext4 image of %s ..." "${size}"
truncate -s ${size} "${src}.img"
local ext4_args=()
ext4_args+=(-O ^has_journal,^resize_inode -E lazy_itable_init=0 -m 0)
mkfs.ext4 ${ext4_args[@]} -F "${src}.img" &>/dev/null
tune2fs -c 0 -i 0 "${src}.img" &> /dev/null
mount_img "${work_dir}/${name}.img" "${mnt}"
msg2 "Copying %s ..." "${src}/"
cp -aT "${src}/" "${mnt}/"
umount_img "${mnt}"
fi
msg2 "Creating SquashFS image, this may take some time..."
local mksfs_args=()
if ${persist};then
mksfs_args+=(${work_dir}/${name}.img)
else
mksfs_args+=(${src})
fi
mksfs_args+=(${sfs} -noappend)
local highcomp="-b 256K -Xbcj x86" comp='xz'
mksfs_args+=(-comp ${comp} ${highcomp})
mksquashfs "${mksfs_args[@]}"
make_checksum "${dest}" "${name}"
${persist} && rm "${src}.img"
if [[ -n ${GPG_KEY} ]];then
make_sig "${dest}" "${name}"
fi
show_elapsed_time "${FUNCNAME}" "${timer_start}"
} }
assemble_iso(){ assemble_iso(){
msg "Creating ISO image..." msg "Creating ISO image..."
local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00 | sed -e s/-//g) local mod_date=$(date -u +%Y-%m-%d-%H-%M-%S-00 | sed -e s/-//g)
local appid="$(get_osname) Live/Rescue CD"
local publisher="$(get_osname) <$(get_disturl)>"
xorriso -as mkisofs \ xorriso -as mkisofs \
--modification-date=${mod_date} \ --modification-date=${mod_date} \
--protective-msdos-label \ --protective-msdos-label \
-volid "${iso_label}" \ -volid "${iso_label}" \
-appid "$(get_osname) Live/Rescue CD" \ -appid "${appid}" \
-publisher "$(get_osname) <$(get_disturl)>" \ -publisher "${publisher}" \
-preparer "Prepared by artools/${0##*/}" \ -preparer "Prepared by artools/${0##*/}" \
-r -graft-points -no-pad \ -r -graft-points -no-pad \
--sort-weight 0 / \ --sort-weight 0 / \
@@ -117,10 +136,11 @@ assemble_iso(){
-c boot.catalog \ -c boot.catalog \
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \ -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot \ -eltorito-alt-boot \
-append_partition 2 0xef ${iso_root}/efi.img \ -append_partition 2 0xef ${iso_root}/boot/efi.img \
-e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \ -e --interval:appended_partition_2:all:: -iso_mbr_part_type 0x00 \
-no-emul-boot \ -no-emul-boot \
-iso-level 3 \ -iso-level 3 \
-o ${iso_dir}/${iso_file} \ -o ${iso_dir}/${iso_file} \
${iso_root}/ ${iso_root}/
} }

View File

@@ -37,7 +37,7 @@ track_fs() {
mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}") mount "$@" && FS_ACTIVE_MOUNTS=("$5" "${FS_ACTIVE_MOUNTS[@]}")
} }
mount_overlay(){ mount_overlayfs(){
FS_ACTIVE_MOUNTS=() FS_ACTIVE_MOUNTS=()
local lower= upper="$1" work="$2" local lower= upper="$1" work="$2"
mkdir -p "${mnt_dir}/work" mkdir -p "${mnt_dir}/work"
@@ -52,7 +52,7 @@ mount_overlay(){
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper" track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
} }
umount_overlay(){ umount_overlayfs(){
if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then if [[ -n ${FS_ACTIVE_MOUNTS[@]} ]];then
info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}" info "overlayfs umount: [%s]" "${FS_ACTIVE_MOUNTS[@]}"
umount "${FS_ACTIVE_MOUNTS[@]}" umount "${FS_ACTIVE_MOUNTS[@]}"

View File

@@ -51,7 +51,7 @@ load_profile(){
ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"} ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"}
if [[ -z ${SERVICES[@]} ]];then if [[ -z ${SERVICES[@]} ]];then
SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'connman') SERVICES=('acpid' 'bluetoothd' 'cronie' 'cupsd' 'syslog-ng' 'connmand')
fi fi
if [[ ${DISPLAYMANAGER} != "none" ]];then if [[ ${DISPLAYMANAGER} != "none" ]];then
@@ -61,15 +61,12 @@ load_profile(){
esac esac
fi fi
if [[ -z ${SERVICES_LIVE[@]} ]];then SERVICES_LIVE=('artix-live' 'pacman-init')
SERVICES_LIVE=('artix-live' 'pacman-init')
fi
return 0 return 0
} }
write_live_session_conf(){ write_live_session_conf(){
msg2 "Writing live.conf"
local conf='' local conf=''
conf+=$(printf '%s\n' '# live session configuration') conf+=$(printf '%s\n' '# live session configuration')
conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}") conf+=$(printf "\nAUTOLOGIN=%s\n" "${AUTOLOGIN}")

View File

@@ -19,7 +19,7 @@ error_function() {
error "A failure occurred in %s()." "$func" error "A failure occurred in %s()." "$func"
plain "Aborting..." plain "Aborting..."
fi fi
umount_overlay umount_overlayfs
umount_img umount_img
exit 2 exit 2
} }
@@ -41,7 +41,7 @@ run_safe() {
trap_exit() { trap_exit() {
local sig=$1; shift local sig=$1; shift
error "$@" error "$@"
umount_overlay umount_overlayfs
trap -- "$sig" trap -- "$sig"
kill "-$sig" "$$" kill "-$sig" "$$"
} }
@@ -54,27 +54,6 @@ prepare_traps(){
# trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR # trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR
} }
# Build ISO
make_iso() {
msg "Start [Build ISO]"
touch "${iso_root}/.artix"
for sfs_dir in $(find "${work_dir}" -maxdepth 1 -type d); do
if [[ "${sfs_dir}" != "${work_dir}" ]]; then
make_sfs "${sfs_dir}"
fi
done
msg "Making bootable image"
# Sanity checks
[[ ! -d "${iso_root}" ]] && return 1
if [[ -f "${iso_dir}/${iso_file}" ]]; then
msg2 "Removing existing bootable image..."
rm -rf "${iso_dir}/${iso_file}"
fi
assemble_iso
msg "Done [Build ISO]"
}
copy_overlay(){ copy_overlay(){
local src="$1" dest="$2" local src="$1" dest="$2"
if [[ -e "$src" ]];then if [[ -e "$src" ]];then
@@ -83,43 +62,6 @@ copy_overlay(){
fi fi
} }
clean_up_image(){
local path mnt="$1"
msg2 "Cleaning [%s]" "${mnt##*/}"
path=$mnt/boot
if [[ -d "$path" ]]; then
find "$path" -name 'initramfs*.img' -delete &> /dev/null
fi
path=$mnt/var/lib/pacman/sync
if [[ -d $path ]];then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/cache/pacman/pkg
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/log
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
path=$mnt/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
rm $mnt/boot/grub/grub.cfg
fi
if [[ -f "$mnt/etc/machine-id" ]]; then
rm $mnt/etc/machine-id
fi
}
make_rootfs() { make_rootfs() {
if [[ ! -e ${work_dir}/rootfs.lock ]]; then if [[ ! -e ${work_dir}/rootfs.lock ]]; then
msg "Prepare [Base installation] (rootfs)" msg "Prepare [Base installation] (rootfs)"
@@ -131,9 +73,9 @@ make_rootfs() {
copy_overlay "${ROOT_OVERLAY}" "${rootfs}" copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
[[ -z ${LIVE_LIST} ]] && configure_image "${rootfs}" [[ -z ${LIVE_LIST} ]] && configure_chroot "${rootfs}"
clean_up_image "${rootfs}" clean_up_chroot "${rootfs}"
: > ${work_dir}/rootfs.lock : > ${work_dir}/rootfs.lock
@@ -148,17 +90,17 @@ make_livefs() {
prepare_dir "${livefs}" prepare_dir "${livefs}"
mount_overlay "${livefs}" "${work_dir}" mount_overlayfs "${livefs}" "${work_dir}"
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}" basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
copy_overlay "${LIVE_OVERLAY}" "${livefs}" copy_overlay "${LIVE_OVERLAY}" "${livefs}"
configure_image "${livefs}" configure_chroot "${livefs}"
umount_overlay umount_overlayfs
clean_up_image "${livefs}" clean_up_chroot "${livefs}"
: > ${work_dir}/livefs.lock : > ${work_dir}/livefs.lock
@@ -169,23 +111,22 @@ make_livefs() {
make_bootfs() { make_bootfs() {
if [[ ! -e ${work_dir}/bootfs.lock ]]; then if [[ ! -e ${work_dir}/bootfs.lock ]]; then
msg "Prepare [/iso/boot]" msg "Prepare [/iso/boot]"
local boot="${iso_root}/boot"
prepare_dir "${boot}" prepare_dir "${iso_root}/boot"
cp ${work_dir}/rootfs/boot/vmlinuz* ${boot}/vmlinuz-${ARCH} cp ${work_dir}/rootfs/boot/vmlinuz* ${iso_root}/boot/vmlinuz-${ARCH}
local bootfs="${work_dir}/bootfs" local bootfs="${work_dir}/bootfs"
mount_overlay "${bootfs}" "${work_dir}" mount_overlayfs "${bootfs}" "${work_dir}"
prepare_initcpio "${bootfs}" if ${use_dracut}; then
prepare_initramfs "${bootfs}" prepare_initramfs_dracut "${bootfs}"
else
prepare_initramfs "${bootfs}"
fi
cp ${bootfs}/boot/initramfs.img ${boot}/initramfs-${ARCH}.img umount_overlayfs
prepare_boot_extras "${bootfs}" "${boot}"
umount_overlay
rm -R ${bootfs} rm -R ${bootfs}
: > ${work_dir}/bootfs.lock : > ${work_dir}/bootfs.lock
@@ -202,30 +143,13 @@ make_grub(){
prepare_grub "${work_dir}/rootfs" "$layer" prepare_grub "${work_dir}/rootfs" "$layer"
configure_grub if ${use_dracut}; then
configure_grub_dracut
else
configure_grub
fi
: > ${work_dir}/grub.lock : > ${work_dir}/grub.lock
msg "Done [/iso/boot/grub]" msg "Done [/iso/boot/grub]"
fi fi
} }
compress_images(){
local timer=$(get_timer)
run_safe "make_iso"
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
show_elapsed_time "${FUNCNAME}" "${timer}"
}
prepare_images(){
local timer=$(get_timer)
load_pkgs "${ROOT_LIST}" "${INITSYS}"
run_safe "make_rootfs"
if [[ -n ${LIVE_LIST} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}"
run_safe "make_livefs"
fi
run_safe "make_bootfs"
run_safe "make_grub"
show_elapsed_time "${FUNCNAME}" "${timer}"
}

185
lib/pkg/git.sh Normal file
View File

@@ -0,0 +1,185 @@
#!/bin/bash
#
# Copyright (C) 2018-19 artoo@artixlinux.org
# Copyright (C) 2018 Artix Linux Developers
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
get_local_head(){
echo $(git log --pretty=%H ...refs/heads/master^ | head -n 1)
}
get_remote_head(){
echo $(git ls-remote origin -h refs/heads/master | cut -f1)
}
clone_tree(){
local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}"
msg "Cloning %s (%s) ..." "$tree" "$os"
git clone $url/$tree.git
show_elapsed_time "${FUNCNAME}" "${timer}"
}
has_changes(){
local head_l="$1" head_r="$2"
if [[ "$head_l" == "$head_r" ]]; then
msg2 "remote changes: no"
return 1
else
msg2 "remote changes: yes"
return 0
fi
}
pull_tree(){
local tree="$1" local_head="$2" os="${3:-$(get_osname)}"
local remote_head=$(get_remote_head)
msg "Checking (%s) (%s)" "${tree}" "$os"
if has_changes "${local_head}" "${remote_head}";then
git pull origin master
fi
}
push_tree(){
local tree="$1"
msg "Update (%s)" "${tree}"
git push origin master
}
write_jenkinsfile(){
local pkg="$1"
local jenkins=$pkg/Jenkinsfile
echo "@Library('artix-ci') import org.artixlinux.RepoPackage" > $jenkins
echo '' >> $jenkins
echo 'PackagePipeline(new RepoPackage(this))' >> $jenkins
echo '' >> $jenkins
git add $jenkins
}
write_agentyaml(){
local pkg="$1"
local agent=$pkg/.artixlinux/agent.yaml label='master'
[[ -d $pkg/.artixlinux ]] || mkdir $pkg/.artixlinux
echo '%YAML 1.2' > $agent
echo '---' >> $agent
echo '' >> $agent
echo "label: $label" >> $agent
echo '' >> $agent
git add $agent
}
commit_jenkins_files(){
local pkg="$1"
write_jenkinsfile "$pkg"
write_agentyaml "$pkg"
git commit -m "initial commit"
}
config_tree(){
local tree="$1"
cd $tree
git config --bool pull.rebase true
git config commit.gpgsign true
if [[ -n "${GPGKEY}" ]];then
git config user.signingkey "${GPGKEY}"
else
warning "No GPGKEY configured in makepkg.conf!"
fi
cd ..
}
# write_gitignore() {
# local pkg="$1"
# local gitignore=$pkg/.gitignore
# echo '# ---> ArchLinuxPackages' > $gitignore
# echo '*.tar' >> $gitignore
# echo '*.tar.*' >> $gitignore
# echo '*.jar' >> $gitignore
# echo '*.exe' >> $gitignore
# echo '*.msi' >> $gitignore
# echo '*.zip' >> $gitignore
# echo '*.tgz' >> $gitignore
# echo '*.log' >> $gitignore
# echo '*.log.*' >> $gitignore
# echo '*.sig' >> $gitignore
# echo '' >> $gitignore
# echo 'pkg/' >> $gitignore
# echo 'src/' >> $gitignore
# echo '' >> $gitignore
# echo '# ---> Archives' >> $gitignore
# echo '*.7z' >> $gitignore
# echo '*.rar' >> $gitignore
# echo '*.gz' >> $gitignore
# echo '*.bzip' >> $gitignore
# echo '*.bz2' >> $gitignore
# echo '*.xz' >> $gitignore
# echo '*.lzma' >> $gitignore
# echo '*.cab' >> $gitignore
# echo '' >> $gitignore
# echo '# ---> systemd' >> $gitignore
# echo '*.service' >> $gitignore
# echo '*.socket' >> $gitignore
# echo '*.timer' >> $gitignore
# echo '' >> $gitignore
# echo '# ---> snap' >> $gitignore
# echo '*.snap' >> $gitignore
# echo '' >> $gitignore
#
# git add $gitignore
# }
#
# write_readme(){
# local pkg="$1"
# local readme=$pkg/README.md
#
# echo "# $pkg" > $readme
# echo '' >> $readme
#
# git add $readme
# }
#
# subrepo_new2(){
# local group="${1:-$GROUP}" team="${2:-$TEAM}"
# local dest=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk
#
# cd ${TREE_DIR_ARTIX}/$group
#
# local org=$(get_pkg_org "${PACKAGE}")
#
# prepare_dir "$dest"
#
# subrepo_init "${PACKAGE}" "$org"
#
# commit_jenkins_files2 "${PACKAGE}"
#
# subrepo_push "${PACKAGE}"
#
# add_repo_to_team "${PACKAGE}" "$org" "$team"
# }
#
# commit_jenkins_files2(){
# local pkg="$1"
#
# write_jenkinsfile "$pkg"
# write_agentyaml "$pkg"
# write_readme "$pkg"
# write_gitignore "$pkg"
#
# git commit -m "initial commit"
# }

View File

@@ -12,7 +12,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
create_repo(){ create_repo() {
local pkg="$1" org="$2" local pkg="$1" org="$2"
local gitname=$(get_compliant_name "$pkg") local gitname=$(get_compliant_name "$pkg")
local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }" local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }"
@@ -27,33 +27,16 @@ create_repo(){
echo echo
} }
delete_repo(){ get_team_id() {
local pkg="$1" org="$2" local org="$1" team="$2"
local gitname=$(get_compliant_name "$pkg") local id=$(curl -s -X GET "${GIT_URL}/api/v1/orgs/$org/teams/search?q=$team&access_token=${GIT_TOKEN}" \
-H "accept: application/json" | jq '.data[] .id')
msg2 "Delete package repo [%s] in org (%s)" "${pkg}" "${org}"
curl -s -X DELETE "${GIT_URL}/api/v1/repos/$org/$gitname?access_token=${GIT_TOKEN}" \
-H "accept: application/json"
}
load_team_id(){
local org="$1" team="$2" id=0
local ids=($(curl -s -X GET "${GIT_URL}/api/v1/orgs/$org/teams?access_token=${GIT_TOKEN}" \
-H "accept: application/json" | jshon -a -e id))
case $team in
packages) id="${ids[2]}" ;;
community) id="${ids[1]}" ;;
esac
echo $id echo $id
} }
add_repo_to_team(){ add_repo_to_team() {
local pkg="$1" org="$2" team="$3" local pkg="$1" org="$2" team="$3"
local id=$(load_team_id "$org" "$team") local id=$(get_team_id "$org" "$team")
local gitname=$(get_compliant_name "$pkg") local gitname=$(get_compliant_name "$pkg")
msg2 "Adding package repo [%s] to team (%s)" "$gitname" "$team" msg2 "Adding package repo [%s] to team (%s)" "$gitname" "$team"
@@ -61,3 +44,14 @@ add_repo_to_team(){
curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \ curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \
-H "accept: application/json" -H "accept: application/json"
} }
remove_repo_from_team() {
local pkg="$1" org="$2" team="$3"
local id=$(get_team_id "$org" "$team")
local gitname=$(get_compliant_name "$pkg")
msg2 "Removing package repo [%s] from team (%s)" "$gitname" "$team"
curl -s -X DELETE "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \
-H "accept: application/json"
}

View File

@@ -12,14 +12,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
get_local_head(){
echo $(git log --pretty=%H ...refs/heads/master^ | head -n 1)
}
get_remote_head(){
echo $(git ls-remote origin -h refs/heads/master | cut -f1)
}
get_pkg_org(){ get_pkg_org(){
local pkg="$1" org= sub= local pkg="$1" org= sub=
case ${pkg} in case ${pkg} in
@@ -31,111 +23,34 @@ get_pkg_org(){
echo $org echo $org
} }
subrepo_init() {
local pkg="$1" org="$2"
local gitname=$(get_compliant_name "$pkg")
msg2 "Subrepo init (%s)" "$pkg"
git subrepo init "$pkg" -r gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git
}
subrepo_push(){ subrepo_push(){
local pkg="$1" local pkg="$1"
msg2 "Push (%s)" "$pkg" msg2 "Subrepo push (%s)" "$pkg"
git subrepo push "$pkg" git subrepo push "$pkg" || die "%s push failed" "$pkg"
} }
subrepo_clean(){ subrepo_clean(){
local pkg="$1" local pkg="$1"
msg2 "Clean (%s)" "$pkg" msg2 "Subrepo clean (%s)" "$pkg"
git subrepo clean "$pkg" git subrepo clean "$pkg"
} }
subrepo_pull(){ subrepo_pull(){
local pkg="$1" local pkg="$1"
msg2 "Pull (%s)" "$pkg" msg2 "Subrepo pull (%s)" "$pkg"
git subrepo pull "$pkg" git subrepo pull "$pkg"
} }
subrepo_clone(){ subrepo_clone(){
local pkg="$1" org="$2" local pkg="$1" org="$2"
local gitname=$(get_compliant_name "$pkg") local gitname=$(get_compliant_name "$pkg")
msg2 "Clone [%s] from (%s)" "$pkg" "$org/$gitname" msg2 "Subrepo clone [%s] from (%s)" "$pkg" "$org/$gitname"
git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg" git subrepo clone gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git "$pkg"
} }
clone_tree(){
local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}"
msg "Cloning %s (%s) ..." "$tree" "$os"
git clone $url/$tree.git
show_elapsed_time "${FUNCNAME}" "${timer}"
}
has_changes(){
local head_l="$1" head_r="$2"
if [[ "$head_l" == "$head_r" ]]; then
msg2 "remote changes: no"
return 1
else
msg2 "remote changes: yes"
return 0
fi
}
pull_tree(){
local tree="$1" local_head="$2" os="${3:-$(get_osname)}"
local remote_head=$(get_remote_head)
msg "Checking %s (%s)" "${tree}" "$os"
if $(has_changes "${local_head}" "${remote_head}");then
git pull origin master
fi
}
push_tree(){
local tree="$1"
msg "Update (%s)" "${tree}"
git push origin master
}
write_jenkinsfile(){
local pkg="$1"
local jenkins=$pkg/Jenkinsfile
echo "@Library('artix-ci') import org.artixlinux.RepoPackage" > $jenkins
echo '' >> $jenkins
echo 'PackagePipeline(new RepoPackage(this))' >> $jenkins
echo '' >> $jenkins
git add $jenkins
}
write_agentyaml(){
local pkg="$1"
local agent=$pkg/.artixlinux/agent.yaml label='master'
[[ -d $pkg/.artixlinux ]] || mkdir $pkg/.artixlinux
echo '%YAML 1.2' > $agent
echo '---' >> $agent
echo '' >> $agent
echo "label: $label" >> $agent
echo '' >> $agent
git add $agent
}
commit_jenkins_files(){
local pkg="$1"
write_jenkinsfile "$pkg"
write_agentyaml "$pkg"
git commit -m "add jenkinsfile & .artixlinux/agent.yaml"
}
config_tree(){
local tree="$1"
cd $tree
git config --bool pull.rebase true
git config commit.gpgsign true
if [[ -n "${GPGKEY}" ]];then
git config user.signingkey "${GPGKEY}"
else
warning "No GPGKEY configured in makepkg.conf!"
fi
cd ..
}

View File

@@ -12,216 +12,48 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
shopt -s extglob
get_compliant_name(){ get_compliant_name(){
local gitname="$1" local gitname="$1"
case $gitname in case "$gitname" in
*+) gitname=${gitname//+/plus} *+) gitname=${gitname//+/plus}
esac esac
echo $gitname echo "$gitname"
} }
patch_pkg(){ set_arch_repos(){
local pkg="$1" local x="$1" y="$2" z="$3"
case $pkg in ARCH_REPOS=(core extra community multilib)
'glibc')
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i $pkg/trunk/PKGBUILD
;;
'tp_smapi'|'acpi_call'|'r8168'|'bbswitch'|'broadcom-wl')
sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD
;;
'nvidia')
sed -e 's|-ARCH|-ARTIX|g' -e 's|for Arch kernel|for Artix kernel|g' \
-e 's|for LTS Arch kernel|for LTS Artix kernel|g' \
-i $pkg/trunk/PKGBUILD
;;
'linux')
sed -e 's|-ARCH|-ARTIX|g' -i $pkg/trunk/PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-e 's|CONFIG_CRYPTO_SPECK=.*|CONFIG_CRYPTO_SPECK=n|' \
-i $pkg/trunk/config
cd $pkg/trunk
updpkgsums
cd ../..
;; $x && ARCH_REPOS+=(testing community-testing multilib-testing)
'licenses') $y && ARCH_REPOS+=(staging community-staging multilib-staging)
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' -i $pkg/trunk/PKGBUILD $z && ARCH_REPOS+=(gnome-unstable kde-unstable)
;;
'bash')
sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \
-e "s|etc/bash.|etc/bash/|g" \
-e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \
-i $pkg/trunk/PKGBUILD
cd $pkg/trunk
patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch
updpkgsums
cd ../..
;;
gstreamer|gst-plugins-*)
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i $pkg/trunk/PKGBUILD
;;
esac
}
arch2artix(){
local repo="$1" artix=none
case "$repo" in
core) artix=system ;;
extra) artix=world ;;
community) artix=galaxy ;;
multilib) artix=lib32 ;;
staging) artix=goblins ;;
testing) artix=gremlins ;;
community-staging) artix=galaxy-goblins ;;
community-testing) artix=galaxy-gremlins ;;
multilib-staging) artix=lib32-goblins ;;
multilib-testing) artix=lib32-gremlins ;;
kde-unstable) artix=kde-wobble ;;
gnome-unstable) artix=gnome-wobble ;;
esac
echo $artix
}
find_tree(){
local tree="$1" pkg="$2"
local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg")
result=${result%/*}
echo ${result##*/}
}
arch_repos(){
local stag="$1" unst="$2"
local repos=(core extra testing community community-testing multilib multilib-testing)
$stag && repos+=(staging community-staging multilib-staging)
$unst && repos+=(gnome-unstable kde-unstable)
echo ${repos[@]}
} }
find_repo(){ find_repo(){
local pkg="$1" stag="$2" unst="$3" repo= local pkg="$1" repo= pkgarch="${2:-${CARCH}}"
for r in ${ARCH_REPOS[@]};do
for r in $(arch_repos "$stag" "$unst");do [[ -f $pkg/repos/$r-$pkgarch/PKGBUILD ]] && repo=repos/"$r-$pkgarch"
[[ -f $pkg/repos/$r-${ARCH}/PKGBUILD ]] && repo=$r-${ARCH} [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=repos/"$r"-any
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any [[ -f $pkg/$pkgarch/$r/PKGBUILD ]] && repo="$pkgarch/$r"
done done
echo $repo echo $repo
} }
is_valid_repo(){ find_pkg(){
local src="$1" cases= local searchdir="$1" pkg="$2"
for r in $(arch_repos true true);do local result=$(find "$searchdir" -mindepth 2 -maxdepth 2 -type d -name "$pkg")
cases=${cases:-}${cases:+|}${r} echo "$result"
done
eval "case $src in
${cases}|trunk) return 0 ;;
*) return 1 ;;
esac"
} }
get_cases(){ find_cached_pkgfile() {
local pkglist="${SYSCONFDIR}/pkglist.d/$1.list"
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean"))
local cases=
for p in ${pkgs[@]};do
cases=${cases:-}${cases:+|}${p}
done
echo $cases
}
get_artix_tree(){
local pkg="$1" artix_tree="${2:-$3}" tree
eval "case $pkg in
$(get_cases kernel)) tree=packages-kernel ;;
$(get_cases python)) tree=packages-python ;;
$(get_cases perl)) tree=packages-perl ;;
$(get_cases ruby)) tree=packages-ruby ;;
$(get_cases openrc)) tree=packages-openrc ;;
$(get_cases runit)) tree=packages-runit ;;
$(get_cases s6)) tree=packages-s6 ;;
$(get_cases media)) tree=packages-media ;;
$(get_cases xorg)) tree=packages-xorg ;;
$(get_cases qt5)) tree=packages-qt5 ;;
$(get_cases gtk)) tree=packages-gtk ;;
$(get_cases java)) tree=packages-java ;;
$(get_cases haskell)) tree=packages-haskell ;;
$(get_cases devel)) tree=packages-devel ;;
$(get_cases lxqt)) tree=packages-lxqt ;;
$(get_cases cinnamon)) tree=packages-cinnamon ;;
$(get_cases kde)) tree=packages-kde ;;
$(get_cases gnome)) tree=packages-gnome ;;
$(get_cases mate)) tree=packages-mate ;;
$(get_cases xfce)) tree=packages-xfce ;;
*) tree=$artix_tree
esac"
echo $tree
}
get_import_path(){
local pkg="$1" import_path=
for tree in ${TREE_NAMES_ARCH[@]};do
[[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg
done
echo $import_path
}
pkgver_equal() {
if [[ $1 = *-* && $2 = *-* ]]; then
# if both versions have a pkgrel, then they must be an exact match
[[ $1 = "$2" ]]
else
# otherwise, trim any pkgrel and compare the bare version.
[[ ${1%%-*} = "${2%%-*}" ]]
fi
}
find_cached_package() {
local searchdirs=("$PKGDEST" "$PWD") results=() local searchdirs=("$PKGDEST" "$PWD") results=()
local targetname=$1 targetver=$2 targetarch=$3 local pkg="$1"
local dir pkg pkgbasename name ver rel arch r results
for dir in "${searchdirs[@]}"; do for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue [[ -d "$dir" ]] || continue
[[ -e "$dir/$pkg" ]] && results+=("$dir/$pkg")
for pkg in "$dir"/*.pkg.tar.?z; do
[[ -f $pkg ]] || continue
# avoid adding duplicates of the same inode
for r in "${results[@]}"; do
[[ $r -ef $pkg ]] && continue 2
done
# split apart package filename into parts
pkgbasename=${pkg##*/}
pkgbasename=${pkgbasename%.pkg.tar.?z}
arch=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$arch"}
rel=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$rel"}
ver=${pkgbasename##*-}
name=${pkgbasename%-"$ver"}
if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
pkgver_equal "$targetver" "$ver-$rel"; then
results+=("$pkg")
fi
done
done done
case ${#results[*]} in case ${#results[*]} in
0) 0)
return 1 return 1

View File

@@ -20,6 +20,40 @@ DATADIR=${DATADIR:-'@datadir@/artools'}
LIBDIR=${LIBDIR:-'@libdir@/artools'} LIBDIR=${LIBDIR:-'@libdir@/artools'}
SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'} SYSCONFDIR=${SYSCONFDIR:-'@sysconfdir@/artools'}
OWNER=${SUDO_USER:-$USER}
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
USER_CONF_DIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}/artools"
for baselib in ${LIBDIR}/base/*.sh; do for baselib in ${LIBDIR}/base/*.sh; do
. $baselib . $baselib
done done
prepare_artools(){
prepare_dir "${WORKSPACE_DIR}"
prepare_dir "${USER_CONF_DIR}"
}
load_base_config(){
local conf="$1/artools-base.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
ARCH=$(uname -m)
CHROOTS_DIR=${CHROOTS_DIR:-'/var/lib/artools'}
WORKSPACE_DIR=${WORKSPACE_DIR:-"/home/${OWNER}/artools-workspace"}
return 0
}
load_base_config "${USER_CONF_DIR}" || load_base_config "${SYSCONFDIR}"

View File

@@ -12,6 +12,43 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
for isolib in ${LIBDIR}/iso/*.sh; do for isolib in ${LIBDIR}/iso/*.sh; do
. $isolib . $isolib
done done
load_iso_config(){
local conf="$1/artools-iso.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
CHROOTS_ISO="${CHROOTS_DIR}/buildiso"
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
PROFILE='base'
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}
INITSYS=${INITSYS:-'openrc'}
GPG_KEY=${GPG_KEY:-''}
UPLIMIT=${UPLIMIT:-1000}
FILE_HOST="download.${DOMAIN}"
FILE_HOME=${FILE_HOME:-'/srv/iso'}
FILE_PORT=${FILE_PORT:-65432}
ACCOUNT=${ACCOUNT:-'naughtyISOuploader'}
return 0
}
load_iso_config "${USER_CONF_DIR}" || load_iso_config "${SYSCONFDIR}"

View File

@@ -12,6 +12,79 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
. @libdir@/artools/util-base.sh
for pkglib in ${LIBDIR}/pkg/*.sh; do for pkglib in ${LIBDIR}/pkg/*.sh; do
. $pkglib . $pkglib
done done
load_pkg_config(){
local conf="$1/artools-pkg.conf"
[[ -f "$conf" ]] || return 1
[[ -r "$conf" ]] && . "$conf"
DOMAIN='artixlinux.org'
GIT_DOMAIN="gitea.${DOMAIN}"
GIT_URL="https://${GIT_DOMAIN}"
GIT_TOKEN=${GIT_TOKEN:-''}
TREE_DIR_ARTIX=${TREE_DIR_ARTIX:-"${WORKSPACE_DIR}/artixlinux"}
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
TREE_NAMES_ARTIX=(
packages
community
packages-kernel
packages-net
packages-gfx
packages-openrc
packages-runit
packages-s6
packages-xorg
packages-python
packages-perl
packages-java
packages-qt5
packages-devel
packages-ruby
packages-gtk
packages-gnome
packages-cinnamon
packages-lxqt
packages-mate
packages-kde
packages-xfce
packages-wm
# packages-haskell
)
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
TREE_DIR_ARCH=${TREE_DIR_ARCH:-"${WORKSPACE_DIR}/archlinux"}
TREE_NAMES_ARCH=(packages community)
HOST_TREE_ARCH=${HOST_TREE_ARCH:-'git://git.archlinux.org/svntogit'}
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
DBEXT=${DBEXT:-'xz'}
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
return 0
}
load_pkg_config "${USER_CONF_DIR}" || load_pkg_config "${SYSCONFDIR}"