Compare commits

...

66 Commits
0.22 ... 0.26.1

Author SHA1 Message Date
b7fd0a4e41 enable lto, upd conf 2021-12-23 19:07:38 +01:00
b734357ea9 checkrepo: refactoring 2021-11-29 22:58:49 +01:00
74d44873e7 checkrepo: add obsolete pkg check 2021-11-29 16:41:49 +01:00
91e038c3f5 don't find arch vcs repos 2021-11-28 13:59:20 +01:00
8548a584f3 restore arch vcs repo detect 2021-11-28 13:57:07 +01:00
38fb213e13 pkg tools: remove old layout support 2021-11-26 19:04:17 +01:00
fade611ae7 checkrepo: fix check_db() and speed it up 2021-11-26 10:55:11 +01:00
8cdb68ce6a fix call to artools-chroot when artools-pkg is not installed 2021-11-08 16:21:23 -03:00
7d949afeb7 Merge pull request 'add initial support for dinit' (#59) from konimex/artools:master into master
Reviewed-on: artix/artools#59
2021-11-05 16:36:30 +01:00
6f037f6faf add initial support for dinit 2021-10-27 17:02:50 +07:00
ba1e6644ea arch-patches (#58)
Reviewed-on: artix/artools#58
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-09-11 00:19:34 +02:00
3f90082cc1 update tree names 2021-07-24 18:01:46 +02:00
915db85b7d commitpkg: fix team check 2021-07-24 16:21:31 +02:00
a5a29259e5 pkg (#57)
Reviewed-on: artix/artools#57
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-07-24 15:50:33 +02:00
c5f8bc7e20 lib/table: don't redirect to stderr 2021-07-21 15:35:24 +02:00
11dd9be3f1 comp (#56)
Reviewed-on: artix/artools#56
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-07-13 11:07:33 +02:00
f058b9155b iso.conf: better explaining comments 2021-07-11 10:31:06 +02:00
7c3d1343e8 buildiso: fix checksum file 2021-07-11 09:24:06 +02:00
80b14b7f1f buildiso: make suqsh compression configurable 2021-07-11 00:08:03 +02:00
29a1e98c0e buildiso: add -l arg 2021-07-10 22:23:23 +02:00
8bcb311bbd buildiso: make compression level configurable 2021-07-10 22:14:39 +02:00
0c5816fac2 buildiso: fix suite66 2021-07-10 20:50:41 +02:00
4b802be860 buildiso: optional initcpio (#55)
Reviewed-on: artix/artools#55
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-07-10 20:41:39 +02:00
8621191465 links-add: remove preserve option 2021-07-09 00:18:08 +02:00
b019f42ee1 chroot-run: sleep 1 after killing chroot process 2021-07-06 01:18:37 +02:00
205d668630 update pkg conf defaults 2021-07-05 22:36:00 +02:00
3ae2972d2b commitpkg: fix remove commit msg 2021-07-04 23:10:12 +02:00
5ad1bb49d1 data/pacman: sync conf with pacman-6.0.0-3 2021-07-02 00:33:22 +02:00
b7e7e4c53a buildiso: use tty7 for s6-linux-init 2021-06-29 19:07:07 -05:00
5c58a6cc5b Update 'lib/iso/services.sh'
Signed-off-by: Nathan Owens <ndowens@artixlinux.org>
2021-06-20 19:17:50 +02:00
a12d0a4778 buildiso: default to 'default' tree name 2021-06-05 16:04:09 +02:00
4293f5a967 Merge pull request 'commitpkg: adjust msg' (#52) from msg into master
Reviewed-on: artix/artools#52
2021-06-01 19:27:33 +02:00
d3e42f60e1 commitpkg: adjust msg 2021-05-30 19:43:51 +02:00
7605aaf55c buildiso: don't write calamares unpack.conf 2021-05-26 20:20:49 +02:00
b57c5e668c links-add: fix db check 2021-05-26 17:52:13 +02:00
db17939f7d buildiso: don't write postcfg.conf 2021-05-25 16:35:19 +02:00
0818ea40e8 links-add: arch backports
* handle GPGKEY with spaces
* do not accept public-only keys for signing
* use more libmakepkg to handle common compression routines
2021-05-22 20:57:29 +02:00
9b2a478aed add missing m4_include 2021-05-20 20:19:08 +02:00
2c3578a850 gitea (#51)
Reviewed-on: artix/artools#51
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-05-15 20:51:00 +02:00
2dcb55cef4 gitea-api (#50)
Reviewed-on: artix/artools#50
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-05-15 16:41:18 +02:00
81d890cead default to gz for repo databases 2021-05-15 00:57:33 +02:00
33685e164d commitpkg: revert git add package only 2021-05-06 19:08:17 +02:00
f419683149 proto: update 2021-05-06 18:58:13 +02:00
54f31daccb comparepkg: adjust to artix.list 2021-05-06 17:40:07 +02:00
be0cfb636e Makefile: install proto pkgbuilds 2021-05-06 17:22:26 +02:00
4108a038fa rename suite66 2021-05-06 17:22:02 +02:00
4634c78520 commitpkg: only git add the pkg dir 2021-05-06 17:11:58 +02:00
a9409d3837 update proto pkgbuiild 2021-05-06 17:11:27 +02:00
02c3a079a2 comparepkg: sort pkgs; write artix pkg moves 2021-05-06 16:19:30 +02:00
72993117fa add proto pkgbuild 2021-05-05 17:34:47 +02:00
6e0c336c67 buildiso: write proper calameres services-66.conf 2021-05-03 16:53:20 +02:00
a396dafed9 buildiso: show service msg 2021-05-03 11:07:26 +02:00
c613471459 fstabgen: arch backport 2021-05-03 11:06:48 +02:00
7abd0c9453 add 66 support for package tree 2021-04-30 22:06:13 +02:00
390cc84bbf buildiso: fix 66 service adding 2021-04-30 17:37:06 +02:00
2f1cf770cd artools/0.23 (#49)
Reviewed-on: artix/artools#49
Co-authored-by: artoo <artoo@artixlinux.org>
Co-committed-by: artoo <artoo@artixlinux.org>
2021-04-29 21:27:56 +02:00
2f5a374523 comparepkg: highlight rebuild trigger pkg 2021-04-25 16:27:20 +02:00
76ca2dfdc7 deploypkg: fix return code 2021-02-08 20:00:56 +01:00
f05688dc12 rm char 2021-02-07 10:21:13 +01:00
091b5deaa8 mkchrootpkg: only expose failed build logs instead of products 2021-02-07 10:18:53 +01:00
93e4beb61f makepkg.conf: make rsync use new-style compression in makepkg.conf 2021-01-28 15:45:54 +01:00
76b4ff511d mkchrootpkg: Expose failed build logs/products 2021-01-28 15:44:23 +01:00
2995207e6b remove code now done in live-services (#48)
buildiso: simplify dm serivce

buildiso: remove openrc specific DM service handling

remove code now done in live-services

Reviewed-on: artix/artools#48
Co-Authored-By: artoo <artoo@artixlinux.org>
Co-Committed-By: artoo <artoo@artixlinux.org>
2021-01-08 19:06:41 +01:00
5aa8bd3333 comparepkg: remove obsolete help opt 2021-01-05 17:58:41 +01:00
699ea06445 Merge pull request 's6: force artix-live dependency on displaymanagers' (#47) from Dudemanguy/artools:master into master
Reviewed-on: artix/artools#47
2021-01-05 17:56:22 +01:00
4b9a883113 s6: force artix-live dependency on displaymanagers
A bit of a hack, but it's good enough. The liveiso has the problem of
the display manager service starting before the artix-live service
starts. This means the artix user isn't created yet and thus autologin
fails. What needs to happen is that every display manager service should
have a dependency on artix-live. However, s6-rc has no way to specify
optional dependencies so simply adding it to the script package can't be
a solution. Instead what we can do is to just check for the existence of
these services when building the iso (this is the only case where we
care about this dependency) and manually add it to the dependencies file
and rebuild the database.
2021-01-05 10:31:48 -06:00
59 changed files with 676 additions and 1367 deletions

View File

@@ -1,11 +1,10 @@
VERSION=0.22 V=0.26
TOOLS = artools TOOLS = artools
PREFIX ?= /usr PREFIX ?= /usr
SYSCONFDIR = /etc SYSCONFDIR = /etc
BINDIR = $(PREFIX)/bin BINDIR = $(PREFIX)/bin
DATADIR = $(PREFIX)/share DATADIR = $(PREFIX)/share
CPIODIR = $(SYSCONFDIR)/initcpio
BASE_CONF = \ BASE_CONF = \
data/conf/artools-base.conf data/conf/artools-base.conf
@@ -23,6 +22,8 @@ BASE_DATA = \
PKG_CONF = \ PKG_CONF = \
data/conf/artools-pkg.conf data/conf/artools-pkg.conf
SETARCH_ALIASES = \
PKG_BIN = \ PKG_BIN = \
bin/pkg/buildpkg \ bin/pkg/buildpkg \
bin/pkg/deploypkg \ bin/pkg/deploypkg \
@@ -38,7 +39,8 @@ PKG_BIN = \
bin/pkg/find-libdeps \ bin/pkg/find-libdeps \
bin/pkg/batchpkg \ bin/pkg/batchpkg \
bin/pkg/signpkg \ bin/pkg/signpkg \
bin/pkg/checkrepo bin/pkg/checkrepo \
bin/pkg/gitearepo
LN_COMMITPKG = \ LN_COMMITPKG = \
extrapkg \ extrapkg \
@@ -105,7 +107,7 @@ FILEMODE = -m0644
MODE = -m0755 MODE = -m0755
LN = ln -sf LN = ln -sf
RM = rm -f RM = rm -f
M4 = m4 -P M4 = m4 -P --define=m4_artools_pkg_version=$V
CHMODAW = chmod a-w CHMODAW = chmod a-w
CHMODX = chmod +x CHMODX = chmod +x
@@ -137,6 +139,9 @@ install_base:
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)
install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) install $(FILEMODE) $(BASE_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS)
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/setarch-aliases.d
for a in ${SETARCH_ALIASES}; do install $(FILEMODE) setarch-aliases.d/$$a $(DESTDIR)$(DATADIR)/$(TOOLS)/setarch-aliases.d; done
install_pkg: install_pkg:
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(PKG_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(FILEMODE) $(PKG_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
@@ -160,10 +165,7 @@ install_pkg:
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install_cpio: install_iso:
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install
install_iso: install_cpio
install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(DIRMODE) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)
install $(FILEMODE) $(ISO_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS) install $(FILEMODE) $(ISO_CONF) $(DESTDIR)$(SYSCONFDIR)/$(TOOLS)

View File

@@ -18,23 +18,18 @@ artools
##### Runtime: ##### Runtime:
- base: - base:
* openssh
* rsync
* haveged
* os-prober * os-prober
* gnupg
* pacman * pacman
- pkg: - pkg:
* namcap * namcap
* git-subrepo * git-subrepo
* jq * rsync
- iso: - iso:
* dosfstools * dosfstools
* libisoburn * libisoburn
* squashfs-tools * squashfs-tools
* mkinitcpio
* grub * grub
#### Configuration #### Configuration

View File

@@ -32,6 +32,7 @@ kill_chroot_process(){
fi fi
fi fi
done done
sleep 1
} }
# umask might have been changed in /etc/profile # umask might have been changed in /etc/profile
@@ -84,14 +85,12 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.' [[ -z $working_dir ]] && die 'Please specify a working directory.'
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir) mapfile -t cache_dirs < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
fi fi
# shellcheck disable=2016 # shellcheck disable=2016
host_mirrors=($("$pacconf_cmd" --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) host_mirrors=($(pacman-conf --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#'))
for host_mirror in "${host_mirrors[@]}"; do for host_mirror in "${host_mirrors[@]}"; do
if [[ $host_mirror == *file://* ]]; then if [[ $host_mirror == *file://* ]]; then
@@ -103,7 +102,7 @@ done
while read -r line; do while read -r line; do
# shellcheck disable=2016 # shellcheck disable=2016
mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \ mapfile -t lines < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
--repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#') --repo "$line" Server | sed -r 's#(.*/)[^/]+/os/.+#\1#')
for line in "${lines[@]}"; do for line in "${lines[@]}"; do
if [[ $line = file://* ]]; then if [[ $line = file://* ]]; then
@@ -111,7 +110,7 @@ while read -r line; do
in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line") in_array "$line" "${cache_dirs[@]}" || cache_dirs+=("$line")
fi fi
done done
done < <("$pacconf_cmd" --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list) done < <(pacman-conf --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
copy_hostconf () { copy_hostconf () {
unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1 unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
@@ -167,7 +166,13 @@ eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
[[ -z $nosetarch ]] || unset CARCH [[ -z $nosetarch ]] || unset CARCH
${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@" if [[ -f "@datadir@/artools/setarch-aliases.d/${CARCH}" ]]; then
read -r set_arch < "@datadir@/artools/setarch-aliases.d/${CARCH}"
else
set_arch="${CARCH}"
fi
${CARCH:+setarch "${set_arch}"} chroot "${working_dir}" "$@"
ret=$? ret=$?

View File

@@ -364,23 +364,19 @@ while read -r src target fstype opts fsroot; do
pass=0 pass=0
fi fi
if [[ $fsroot != / ]]; then if [[ $fsroot != / && $fstype != btrfs ]]; then
if [[ $fstype = btrfs ]]; then # it's a bind mount
opts+=,subvol=${fsroot#/} src=$(findmnt -funcevo TARGET "$src")$fsroot
else if [[ $src -ef $target ]]; then
# it's a bind mount # hrmm, this is weird. we're probably looking at a file or directory
src=$(findmnt -funcevo TARGET "$src")$fsroot # that was bound into a chroot from the host machine. Ignore it,
if [[ $src -ef $target ]]; then # because this won't actually be a valid mount. Worst case, the user
# hrmm, this is weird. we're probably looking at a file or directory # just re-adds it.
# that was bound into a chroot from the host machine. Ignore it, continue
# because this won't actually be a valid mount. Worst case, the user
# just re-adds it.
continue
fi
fstype=none
opts+=,bind
pass=0
fi fi
fstype=none
opts+=,bind
pass=0
fi fi
# filesystem quirks # filesystem quirks

View File

@@ -64,10 +64,8 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.' [[ -z $working_dir ]] && die 'Please specify a working directory.'
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd CacheDir) mapfile -t cache_dirs < <(pacman-conf CacheDir)
fi fi
umask 0022 umask 0022

View File

@@ -86,9 +86,9 @@ make_rootfs() {
basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}" basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
copy_overlay "${ROOT_OVERLAY}" "${rootfs}" copy_overlay "${root_overlay}" "${rootfs}"
[[ -z ${LIVE_LIST} ]] && configure_chroot "${rootfs}" [[ -z ${live_list} ]] && configure_chroot "${rootfs}"
clean_up_chroot "${rootfs}" clean_up_chroot "${rootfs}"
@@ -109,7 +109,7 @@ make_livefs() {
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}" basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
copy_overlay "${LIVE_OVERLAY}" "${livefs}" copy_overlay "${live_overlay}" "${livefs}"
configure_chroot "${livefs}" configure_chroot "${livefs}"
@@ -138,7 +138,7 @@ make_bootfs() {
if "${use_dracut}"; then if "${use_dracut}"; then
prepare_initramfs_dracut "${bootfs}" prepare_initramfs_dracut "${bootfs}"
else else
prepare_initramfs "${bootfs}" prepare_initramfs_mkinitcpio "${bootfs}"
fi fi
umount_overlayfs umount_overlayfs
@@ -154,14 +154,14 @@ make_grub(){
msg "Prepare [/iso/boot/grub]" msg "Prepare [/iso/boot/grub]"
local layer=${work_dir}/rootfs local layer=${work_dir}/rootfs
[[ -n ${LIVE_LIST} ]] && layer=${work_dir}/livefs [[ -n ${live_list} ]] && layer=${work_dir}/livefs
prepare_grub "${work_dir}/rootfs" "$layer" prepare_grub "${work_dir}/rootfs" "$layer"
if ${use_dracut}; then if ${use_dracut}; then
configure_grub_dracut configure_grub_dracut
else else
configure_grub configure_grub_mkinitcpio
fi fi
: > "${work_dir}"/grub.lock : > "${work_dir}"/grub.lock
@@ -207,6 +207,10 @@ prepare_build(){
live_dir=/LiveOS live_dir=/LiveOS
mnt_dir=${chroots_iso}/${profile}/mnt mnt_dir=${chroots_iso}/${profile}/mnt
if [[ -n "${GPG_KEY}" ]]; then
${use_dracut} || export_gpg_publickey
fi
} }
display_settings(){ display_settings(){
@@ -217,6 +221,8 @@ display_settings(){
msg "ISO SETTINGS:" msg "ISO SETTINGS:"
msg2 "ISO_VERSION: %s" "${ISO_VERSION}" msg2 "ISO_VERSION: %s" "${ISO_VERSION}"
msg2 "COMPRESSION: %s" "${COMPRESSION}"
[[ "${COMPRESSION}" == 'zstd' ]] && msg2 "COMPRESSION_LEVEL: %s" "${COMPRESSION_LEVEL}"
msg "BUILD:" msg "BUILD:"
show_profile show_profile
@@ -248,10 +254,10 @@ mk_boot(){
} }
mk_chroots(){ mk_chroots(){
load_pkgs "${ROOT_LIST}" "${INITSYS}" load_pkgs "${root_list}"
run_safe "make_rootfs" run_safe "make_rootfs"
if [[ -n ${LIVE_LIST} ]]; then if [[ -n ${live_list} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}" load_pkgs "${live_list}"
run_safe "make_livefs" run_safe "make_livefs"
fi fi
} }
@@ -328,7 +334,7 @@ usage() {
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 img signing' echo ' -g <key> The gpg key for img signing'
echo " [default: ${GPG_KEY}]" echo " [default: none]"
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 chroot only' echo ' -x Build chroot only'

View File

@@ -72,6 +72,12 @@ get_pacman_conf "${repo}"
get_makepkg_conf get_makepkg_conf
if [[ -f "${DATADIR}/setarch-aliases.d/${arch}" ]]; then
read -r set_arch < "${DATADIR}/setarch-aliases.d/${arch}"
else
set_arch="${arch}"
fi
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME
mkchrootpkg_args+=("${@:$OPTIND}") mkchrootpkg_args+=("${@:$OPTIND}")
@@ -92,7 +98,7 @@ if ${create_first} || [[ ! -d "${chroots_pkg}/${repo}-${arch}" ]];then
rm -rf --one-file-system "${chroots_pkg}/${repo}-${arch}" rm -rf --one-file-system "${chroots_pkg}/${repo}-${arch}"
(umask 0022; mkdir -p "${chroots_pkg}/${repo}-${arch}") (umask 0022; mkdir -p "${chroots_pkg}/${repo}-${arch}")
setarch "${arch}" mkchroot \ setarch "${set_arch}" mkchroot \
-C "${pacman_conf}" \ -C "${pacman_conf}" \
-M "${makepkg_conf}" \ -M "${makepkg_conf}" \
"${chroots_pkg}/${repo}-${arch}/root" \ "${chroots_pkg}/${repo}-${arch}/root" \

View File

@@ -15,54 +15,35 @@
m4_include(lib/util-base.sh) m4_include(lib/util-base.sh)
m4_include(lib/util-pkg.sh) m4_include(lib/util-pkg.sh)
m4_include(lib/base/message.sh) m4_include(lib/base/message.sh)
m4_include(lib/pkg/common.sh)
m4_include(lib/pkg/git.sh) m4_include(lib/pkg/git.sh)
m4_include(lib/pkg/gitea.sh)
m4_include(lib/pkg/repo.sh) m4_include(lib/pkg/repo.sh)
m4_include(lib/pkg/jenkins.sh) m4_include(lib/pkg/jenkins.sh)
#{{{ new git repo #{{{ new git repo
get_compliant_name(){
local gitname="$1"
case "$gitname" in
*+) gitname=${gitname//+/plus} ;;
*+*) gitname=${gitname//+/-} ;;
esac
echo "$gitname"
}
subrepo_clone(){ subrepo_clone(){
local pkg="$1" org="$2" gitname local pkg="$1"
gitname=$(get_compliant_name "$pkg") local org="$2"
msg2 "Subrepo clone [%s] from (%s)" "$pkg" "$org/$gitname" local name="$3"
git subrepo clone "${GIT_SSH}":"$org"/"$gitname".git "$pkg"
}
create_repo() { msg2 "Subrepo clone [%s] from (%s)" "$pkg" "$org/$name"
local pkg="$1" org="$2" gitname git subrepo clone "${GIT_SSH}":"$org"/"$name".git "$pkg"
gitname=$(get_compliant_name "$pkg")
local json="{ \"auto_init\": true, \"name\":\"$gitname\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }"
msg2 "Create package repo [%s] in org (%s)" "${pkg}" "${org}"
curl -s -X POST "${GIT_URL}/api/v1/org/$org/repos?access_token=${GIT_TOKEN}" \
-H "accept: application/json" \
-H "content-type: application/json" \
-d "$json"
echo
} }
subrepo_new(){ subrepo_new(){
cd "${TREE_DIR_ARTIX}/${group}" || return cd "${TREE_DIR_ARTIX}/${group}" || return
local org local org gitname
org=$(get_pkg_org "${package}") org=$(get_pkg_org "${package}")
gitname=$(get_compliant_name "${package}")
create_repo "${package}" "$org" gitearepo -cr "$gitname"
add_repo_to_team "${package}" "$org" "${team}" add_team_to_repo "$gitname" "$org" "${team}"
subrepo_clone "${package}" "$org" subrepo_clone "${package}" "$org" "$gitname"
mkdir -p "${TREE_DIR_ARTIX}/${group}/${package}/trunk" mkdir -p "${TREE_DIR_ARTIX}/${group}/${package}/trunk"
@@ -136,6 +117,7 @@ patch_pkg(){
local pkgpath="$1" local pkgpath="$1"
local pkg=${pkgpath%/*} local pkg=${pkgpath%/*}
pkg=${pkg##*/} pkg=${pkg##*/}
sed -e 's|arch-meson|artix-meson|' -i "$pkgpath"/PKGBUILD
case $pkg in case $pkg in
glibc) glibc)
msg2 "Patching %s" "$pkg" msg2 "Patching %s" "$pkg"

View File

@@ -18,19 +18,42 @@ m4_include(lib/base/message.sh)
m4_include(lib/pkg/repo.sh) m4_include(lib/pkg/repo.sh)
m4_include(lib/pkg/table.sh) m4_include(lib/pkg/table.sh)
#{{{ db libs
extract_db() {
local u="$1" cdir="$2"
rm -rf "$cdir"
mkdir -p "$cdir"
msg2 "%s" "${cdir##*/}"
curl -L -s "$u" | bsdtar -xf - -C "$cdir"
}
update_db_cache(){
msg "Updating database cache ..."
local cachedir url
for repo in "${searchrepos[@]}"; do
cachedir=${db_cache_dir}/linksdb/$repo
url=${REPOS_MIRROR}/$repo/os/${CARCH}/$repo.${linksdb_ext}
extract_db "$url" "$cachedir"
done
msg "Done"
}
#}}}
#{{{ sogrep #{{{ sogrep
query_db() { query_db() {
for repo in "${searchrepos[@]}"; do for repo in "${searchrepos[@]}"; do
local db local db
db=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}/ db=${db_cache_dir}/linksdb/$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 "${tableQ}" "$repo" "$pkg" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u done < <(grep -rZ "$library" "$db") | sort -u
fi fi
done done
} }
@@ -41,7 +64,7 @@ query_db() {
is_db_entry() { is_db_entry() {
local pkgname="$1" repo="${REPOS[$2]}" entry local pkgname="$1" repo="${REPOS[$2]}" entry
entry=${db_cache_dir}/${linksdb_ext}/${CARCH}/$repo/$pkgname entry=${db_cache_dir}/linksdb/$repo/$pkgname
if [[ -d "$entry" ]];then if [[ -d "$entry" ]];then
return 0 return 0
@@ -50,26 +73,74 @@ is_db_entry() {
} }
check_db(){ check_db(){
local pkgpath="${1%/*}" local pkgpath="${1}"
for repo in "${!REPOS[@]}"; do for repo in "${!REPOS[@]}"; do
local pkgbuild artixver local pkgbuild artixver
[[ -f $pkgpath/$CARCH/$repo/PKGBUILD ]] && pkgbuild=$pkgpath/$CARCH/$repo/PKGBUILD if [[ -f $pkgpath/$repo/PKGBUILD ]]; then
[[ -f $pkgpath/repos/$repo-$CARCH/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-$CARCH/PKGBUILD pkgbuild=$pkgpath/$repo/PKGBUILD
[[ -f $pkgpath/repos/$repo-any/PKGBUILD ]] && pkgbuild=$pkgpath/repos/$repo-any/PKGBUILD
# shellcheck disable=1090 # shellcheck disable=1090
. "$pkgbuild" 2>/dev/null . "$pkgbuild" 2>/dev/null
artixver=$(get_full_version) artixver=$(get_full_version)
for name in "${pkgname[@]}"; do
if ! is_db_entry "$name-$artixver" "$repo"; then
msg_row_red "${tableU}" "$repo" "$name" "$artixver" "false"
else
${all_db} && msg_row "${tableU}" "$repo" "$name" "$artixver" "true"
fi
done
unset artixver pkgbuild pkgver epoch pkgname pkgbase
fi
done
}
for name in "${pkgname[@]}"; do #}}}
if ! is_db_entry "$name-$artixver" "$repo"; then
msg_row_upgrade "${tableU}" "$repo" "$name" "$artixver" "false" # {{{ check obsolete
else
${all_db} && msg_row "${tableU}" "$repo" "$name" "$artixver" "true" show_obsolete_table() {
local arch_mirror='https://mirror.f4st.host/archlinux'
local arch_repo artix_repo artix_db arch_db url
arch_repo="${searchrepos[@]}"
artix_repo="${REPOS[$arch_repo]}"
artix_db="${db_cache_dir}/artixdb/${artix_repo}"
arch_db="${db_cache_dir}/archdb/${arch_repo}"
msg "Updating database cache ..."
url=${REPOS_MIRROR}/${artix_repo}/os/$CARCH/${artix_repo}.${db_ext}
extract_db "$url" "${artix_db}"
url=${arch_mirror}/${arch_repo}/os/$CARCH/${arch_repo}.${db_ext}
extract_db "$url" "${arch_db}"
msg "Done"
msg_table_header "${tableQ}" "Repo" "Package" "Obsolete"
for p in "${artix_db}"/*; do
local pkg rel
pkg=${p##*/}
rel=${pkg##*-}
rel=${rel%.*}
pkg=${pkg%-*}
local p="$pkg-$rel"
if [[ "$p" != *openrc* ]] && [[ "$p" != *runit* ]] \
&& [[ "$p" != *s6* ]] && [[ "$p" != *suite66* ]] \
&& [[ "$p" != *eudev* ]] && [[ "$p" != *elogind* ]] \
&& [[ "$p" != *sysusers* ]] && [[ "$p" != *tmpfiles* ]] \
&& [[ "$p" != *execline* ]] && [[ "$p" != *skalibs* ]] \
&& [[ "$p" != *netifrc* ]] && [[ "$p" != *bootlogd* ]] \
&& [[ "$p" != *pam_rundir* ]] && [[ "$p" != *artools* ]] \
&& [[ "$p" != *archlinux* ]] && [[ "$p" != *iso-profiles* ]] \
&& [[ "$p" != *calamares* ]] && [[ "$p" != *iso-initcpio* ]] \
&& [[ "$p" != *dinit* ]] && [[ "$p" != *artix* ]]; then
if [[ ! -d "${arch_db}/$p" ]]; then
msg_row "${tableQ}" "${artix_repo}" "$p" "true"
fi fi
done fi
unset artixver pkgbuild pkgver epoch pkgname pkgbase
done done
} }
@@ -85,23 +156,10 @@ show_db_table(){
tree_loop check_db tree_loop check_db
} }
update_db_cache(){
msg "Updating database cache ..."
local cachedir url
for repo in "${searchrepos[@]}"; do
cachedir=${db_cache_dir}/${linksdb_ext}/${CARCH}/${repo}
rm -rf "$cachedir"
mkdir -p "$cachedir"
msg2 "%s" "$repo"
url=${REPOS_MIRROR}/${repo}/os/${CARCH}/${repo}.${linksdb_ext}
curl -L -s "$url" | bsdtar -xf - -C "$cachedir"
done
msg "Done"
}
db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" db_cache_dir="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
linksdb_ext="links.tar.${DBEXT}" linksdb_ext="links.tar.${DBEXT}"
db_ext="db.tar.${DBEXT}"
load_makepkg_config load_makepkg_config
@@ -109,9 +167,10 @@ sync=false
check=false check=false
query=false query=false
all_db=false all_db=false
obsolete=false
readonly tableU="%-20s %-35s %-30s %-10s" readonly tableU="%-20s %-35s %-30s %-10s"
readonly tableQ="%-20s %-45s %s" readonly tableQ="%-20s %-55s %s"
load_valid_names load_valid_names
@@ -156,6 +215,7 @@ usage() {
echo " -s Sync repo databases" echo " -s Sync repo databases"
echo ' -c Check repos' echo ' -c Check repos'
echo ' -a Show repo db (-c)' echo ' -a Show repo db (-c)'
echo ' -o Check for obsolete packages'
echo " -q Query repo databases for so libs" echo " -q Query repo databases for so libs"
echo ' -h This help' echo ' -h This help'
echo '' echo ''
@@ -163,7 +223,7 @@ usage() {
exit "$1" exit "$1"
} }
opts='r:qcsah' opts='r:qcsaoh'
while getopts "${opts}" arg; do while getopts "${opts}" arg; do
case "${arg}" in case "${arg}" in
@@ -172,6 +232,7 @@ while getopts "${opts}" arg; do
c) check=true ;; c) check=true ;;
a) all_db=true ;; a) all_db=true ;;
q) query=true ;; q) query=true ;;
o) obsolete=true ;;
h|?) usage 0 ;; h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;; *) echo "invalid argument '${arg}'"; usage 1 ;;
esac esac
@@ -186,3 +247,5 @@ ${sync} && update_db_cache
${check} && show_db_table ${check} && show_db_table
${query} && show_lib_table ${query} && show_lib_table
${obsolete} && show_obsolete_table

View File

@@ -15,7 +15,9 @@
m4_include(lib/util-base.sh) m4_include(lib/util-base.sh)
m4_include(lib/util-pkg.sh) m4_include(lib/util-pkg.sh)
m4_include(lib/base/message.sh) m4_include(lib/base/message.sh)
m4_include(lib/pkg/common.sh)
m4_include(lib/pkg/git.sh) m4_include(lib/pkg/git.sh)
m4_include(lib/pkg/gitea.sh)
m4_include(lib/pkg/repo.sh) m4_include(lib/pkg/repo.sh)
#{{{ functions #{{{ functions
@@ -44,33 +46,6 @@ subrepo_pull(){
git subrepo pull "$pkg" git subrepo pull "$pkg"
} }
prepare_commit(){
# create new layout, copy & remove repos
if [[ -d repos ]]; then
msg "Switching to new layout ..."
[[ ! -d "$CARCH" ]] && mkdir "$CARCH"
for r in repos/*; do
local name noarch
name=${r#*/}
noarch=${name%-*}
mkdir "$CARCH/${noarch}"
cp repos/"${name}"/* "$CARCH/${noarch}/"
git add "$CARCH/${noarch}"
done
git rm -r repos
git commit -m "switch to new repo layout"
msg "Done switch"
fi
if [[ $action == 'add' ]] || [[ $action == 'move' ]] ;then
[[ -d "$CARCH/${repo_dest}" ]] && git rm -r "$CARCH/${repo_dest}"
[[ ! -d "$CARCH" ]] && mkdir "$CARCH"
[[ ! -d "$CARCH/${repo_dest}" ]] && mkdir "$CARCH/${repo_dest}"
fi
}
check_rebuild(){ check_rebuild(){
if [[ -d "$CARCH"/"${valid_names[10]}" ]] \ if [[ -d "$CARCH"/"${valid_names[10]}" ]] \
&& [[ "${repo_dest}" == "${valid_names[7]}" ]]; then && [[ "${repo_dest}" == "${valid_names[7]}" ]]; then
@@ -84,53 +59,50 @@ check_rebuild(){
} }
check_team(){ check_team(){
if [[ "${repo_src}" == "${valid_names[0]}" \ if [[ "${repo_src}" == "${valid_names[0]}" && "${repo_dest}" == "${valid_names[1]}" ]] || \
&& "${repo_dest}" == "${valid_names[1]}" ]] || \ [[ "${repo_src}" == "${valid_names[1]}" && "${repo_dest}" == "${valid_names[0]}" ]] || \
[[ "${repo_src}" == "${valid_names[1]}" \ [[ "${repo_src}" == "${valid_names[1]}" && "${repo_dest}" == "${valid_names[2]}" ]] || \
&& "${repo_dest}" == "${valid_names[0]}" ]] || \ [[ "${repo_src}" == "${valid_names[2]}" && "${repo_dest}" == "${valid_names[1]}" ]] || \
[[ "${repo_src}" == "${valid_names[1]}" \ [[ "${repo_src}" == "${valid_names[0]}" && "${repo_dest}" == "${valid_names[2]}" ]] || \
&& "${repo_dest}" == "${valid_names[2]}" ]] || \ [[ "${repo_src}" == "${valid_names[2]}" && "${repo_dest}" == "${valid_names[0]}" ]]; then
[[ "${repo_src}" == "${valid_names[2]}" \
&& "${repo_dest}" == "${valid_names[1]}" ]] ;then
local org local org gitname
org=$(get_pkg_org "${package}") org=$(get_pkg_org "${package}")
add_repo_to_team "${package}" "$org" "${repo_dest}" gitname=$(get_compliant_name "${package}")
remove_repo_from_team "${package}" "$org" "${repo_src}" add_team_to_repo "$gitname" "${org}" "${repo_dest}"
remove_team_from_repo "$gitname" "${org}" "${repo_src}"
fi fi
} }
path_config() { path_config() {
[[ "${repo_src}" != 'trunk' ]] && pkgbuild="$CARCH/${repo_src}"/PKGBUILD [[ "${repo_src}" != 'trunk' ]] && pkgbuild="$CARCH/${repo_src}"/PKGBUILD
if [[ ! -f "$pkgbuild" ]]; then
pkgbuild=repos/"${repo_src}-${CARCH}"/PKGBUILD
[[ -f repos/"${repo_src}"-any/PKGBUILD ]] && pkgbuild=repos/"${repo_src}"-any/PKGBUILD
fi
# shellcheck disable=1090 # shellcheck disable=1090
. "$pkgbuild" . "$pkgbuild"
} }
get_repo_commit_msg() {
echo "[${repo_src}] -> [${repo_dest}] '${package}-$(get_full_version)' ${action}"
}
get_commit_msg() {
echo "[${repo_src}] '${package}-$(get_full_version)' ${action}"
}
commit_pkg() { commit_pkg() {
local commit_msg pkg local commit_msg pkg
if ${remove};then if ${remove}; then
action='remove' action='remove'
commit_msg=$(get_commit_msg)
msg "Action: %s" "$commit_msg"
if [[ "${repo_src}" == 'trunk' ]];then if [[ "${repo_src}" == 'trunk' ]];then
pkg=${package}
git rm -r trunk git rm -r trunk
else else
pkg="${package}-$(get_full_version)"
prepare_commit
git rm -r "$CARCH/${repo_src}" git rm -r "$CARCH/${repo_src}"
fi fi
commit_msg="[${repo_src}] '$pkg' ${action}"
msg "Action: %s" "$commit_msg"
else else
action='modify' action='modify'
commit_msg="[${repo_src}] '${package}-$(get_full_version)' ${action}" commit_msg=$(get_commit_msg)
msg "Action: %s" "$commit_msg" msg "Action: %s" "$commit_msg"
git add . git add .
fi fi
@@ -139,25 +111,25 @@ commit_pkg() {
repo_commit_pkg() { repo_commit_pkg() {
local commit_msg local commit_msg
if [[ "${repo_src}" == 'trunk' ]];then
[[ -d "$CARCH/${repo_dest}" ]] && git rm -r "$CARCH/${repo_dest}"
[[ ! -d "$CARCH" ]] && mkdir "$CARCH"
[[ ! -d "$CARCH/${repo_dest}" ]] && mkdir "$CARCH/${repo_dest}"
if [[ "${repo_src}" == 'trunk' ]]; then
action='add' action='add'
commit_msg=$(get_repo_commit_msg)
prepare_commit msg "Action: %s" "$commit_msg"
check_rebuild check_rebuild
cp trunk/* "$CARCH/${repo_dest}"/ cp trunk/* "$CARCH/${repo_dest}"/
else else
action='move' action='move'
[[ ! -f $pkgbuild ]] && die "%s does not exist!" "$pkgbuild" [[ ! -f $pkgbuild ]] && die "%s does not exist!" "$pkgbuild"
commit_msg=$(get_repo_commit_msg)
prepare_commit msg "Action: %s" "$commit_msg"
cp "$CARCH/${repo_src}"/* "$CARCH/${repo_dest}"/ cp "$CARCH/${repo_src}"/* "$CARCH/${repo_dest}"/
git rm -r "$CARCH/${repo_src}" git rm -r "$CARCH/${repo_src}"
fi fi
commit_msg="[${repo_src}] -> [${repo_dest}] '${package}-$(get_full_version)' ${action}"
msg "Action: %s" "$commit_msg"
git add . git add .
git commit -m "$commit_msg" git commit -m "$commit_msg"
} }

View File

@@ -34,11 +34,17 @@ write_list(){
compare_m(){ compare_m(){
case ${artixrepo} in case ${artixrepo} in
*testing*|*staging*|*rebuild) *testing*|*staging*|*rebuild)
if [[ "${a}" == "${b}" ]] || [[ "${a}" == 'staging' && "${b}" == 'rebuild' ]]; then if [[ "${a}" == "${b}" ]]; then
msg_row "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" msg_row "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
elif [[ "${a}" == 'staging' && "${b}" == 'rebuild' ]]; then
msg_row_yellow "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
else else
msg_row_notify "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" msg_row_green "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
[[ -n "$archrepo" ]] && write_list "${a}:${b}:$pkg" pkg_moves if [[ -n "$archrepo" ]]; then
write_list "${a}:${b}:$pkg" pkg_moves
else
write_list "@repo@:${b}:$pkg" artix
fi
fi fi
;; ;;
esac esac
@@ -46,7 +52,10 @@ compare_m(){
compare_u(){ compare_u(){
if [ "$result" -eq -1 ];then if [ "$result" -eq -1 ];then
msg_row_upgrade "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" # local arel=${archver##*-} brel=${artixver##*-}
# local reldiff
reldiff=$(( $arel-${brel%.*} ))
msg_row_red "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
write_list "${a}:$pkg" pkg_upgrades write_list "${a}:$pkg" pkg_upgrades
fi fi
} }
@@ -54,7 +63,7 @@ compare_u(){
compare_d(){ compare_d(){
if [ "$result" -eq 1 ];then if [ "$result" -eq 1 ];then
if [[ -n "$archver" ]] && [[ -n "$archrepo" ]];then if [[ -n "$archver" ]] && [[ -n "$archrepo" ]];then
msg_row_downgrade "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" msg_row_yellow "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}"
fi fi
fi fi
} }
@@ -140,6 +149,7 @@ show_downgrades_table(){
show_move_table(){ show_move_table(){
show_compare_header show_compare_header
remove_list pkg_moves remove_list pkg_moves
remove_list artix
tree_loop compare_move tree_loop compare_move
} }
@@ -158,7 +168,7 @@ move=false
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s" readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
usage() { usage() {
echo "Usage: ${0##*/} [options] (with -q [libname])" echo "Usage: ${0##*/} [options]"
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'

View File

@@ -92,6 +92,10 @@ passfiles=("$@")
repo_path=${REPOS_ROOT}/${dest_repo}/os/${CARCH} repo_path=${REPOS_ROOT}/${dest_repo}/os/${CARCH}
if [[ -n "${passfiles[*]}" ]]; then if [[ -n "${passfiles[*]}" ]]; then
${add_pkg} && repo_action add if ${add_pkg}; then
${rm_pkg} && repo_action remove repo_action add
fi
if ${rm_pkg}; then
repo_action remove
fi
fi fi

89
bin/pkg/gitearepo.in Normal file
View File

@@ -0,0 +1,89 @@
#!/bin/bash
#
# Copyright (C) 2018-21 artoo@artixlinux.org
# Copyright (C) 2021 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.
m4_include(lib/util-base.sh)
m4_include(lib/util-pkg.sh)
m4_include(lib/base/message.sh)
m4_include(lib/pkg/common.sh)
#{{{ functions
create_repo() {
local name="$1"
local org="$2"
local json url
json="{ \"auto_init\": true, \"name\":\"$name\", \"gitignores\":\"ArchLinuxPackages\", \"readme\": \"Default\" }"
url="${GIT_URL}/api/v1/org/$org/repos?access_token=${GIT_TOKEN}"
msg2 "Create package repo [%s] in org (%s)" "$name" "$org"
api_post "$url" -H "accept: application/json" \
-H "content-type: application/json" \
-d "$json"
}
transfer_repo() {
local name="$1"
local old_owner="$2"
local new_owner="landfill" json url
local json url
json="{ \"new_owner\": \"$new_owner\", \"team_ids\": []}"
url="${GIT_URL}/api/v1/repos/$old_owner/$name/transfer?access_token=${GIT_TOKEN}"
msg2 "Transfer package repo [%s] in org (%s)" "$name" "$new_owner"
api_post "$url" -H "accept: application/json" \
-H "Content-Type: application/json" \
-d "$json"
}
#}}}
usage() {
echo "Usage: ${0##*/} [options]"
echo ' -r <repo> Repo name'
echo ' -c Create git repo'
echo ' -t Transfer git repo to landfill org'
echo ' -h This help'
echo ''
echo ''
exit "$1"
}
create=false
transfer=false
opts='r:cth'
while getopts "${opts}" arg; do
case "${arg}" in
r) repo="$OPTARG" ;;
c) create=true ;;
t) transfer=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
done
shift $(( OPTIND - 1 ))
org=$(get_pkg_org "${repo}")
${create} && create_repo "${repo}" "${org}"
${transfer} && transfer_repo "${repo}" "${org}"

View File

@@ -35,7 +35,6 @@ REPO_DB_PREFIX=
REPO_DB_SUFFIX= REPO_DB_SUFFIX=
LOCKFILE= LOCKFILE=
CLEAN_LOCK=0 CLEAN_LOCK=0
# PREVENT_DOWNGRADE=0
# ensure we have a sane umask set # ensure we have a sane umask set
umask 0022 umask 0022
@@ -53,7 +52,6 @@ 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"
@@ -103,7 +101,7 @@ check_gpg() {
fi fi
if (( ! VERIFY )); then if (( ! VERIFY )); then
if ! gpg --list-key "${GPGKEY}" &>/dev/null; then if ! gpg --list-secret-key ${GPGKEY:+"$GPGKEY"} &>/dev/null; then
if [[ -n "$GPGKEY" ]]; then if [[ -n "$GPGKEY" ]]; then
error "The key ${GPGKEY} does not exist in your keyring." error "The key ${GPGKEY} does not exist in your keyring."
elif (( ! KEY )); then elif (( ! KEY )); then
@@ -121,11 +119,11 @@ create_signature() {
local ret=0 local ret=0
msg "Signing database '%s'..." "${dbfile##*/.tmp.}" msg "Signing database '%s'..." "${dbfile##*/.tmp.}"
local SIGNWITHKEY="" local SIGNWITHKEY=()
if [[ -n $GPGKEY ]]; then if [[ -n $GPGKEY ]]; then
SIGNWITHKEY="-u ${GPGKEY}" SIGNWITHKEY=(-u "${GPGKEY}")
fi fi
gpg --detach-sign --use-agent --no-armor "${SIGNWITHKEY}" "$dbfile" &>/dev/null || ret=$? gpg --detach-sign --use-agent --no-armor "${SIGNWITHKEY[@]}" "$dbfile" &>/dev/null || ret=$?
if (( ! ret )); then if (( ! ret )); then
msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig" msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig"
@@ -155,21 +153,13 @@ verify_signature() {
} }
verify_repo_extension() { verify_repo_extension() {
local repofile=$1 local junk=()
if [[ $1 = *.links.tar* ]] && get_compression_command "$1" junk; then
return 0
fi
case $repofile in error "'%s' does not have a valid database archive extension." "$1"
*.links.tar.gz) TAR_OPT="z" ;; exit 1
*.links.tar.bz2) TAR_OPT="j" ;;
*.links.tar.xz) TAR_OPT="J" ;;
*.links.tar.zst) TAR_OPT="--zstd" ;;
*.links.tar.Z) TAR_OPT="Z" ;;
*.links.tar) TAR_OPT="" ;;
*) error "'%s' does not have a valid database archive extension." \
"$repofile"
exit 1 ;;
esac
printf '%s' "$TAR_OPT"
} }
# write an entry to the pacman database # write an entry to the pacman database
@@ -201,18 +191,6 @@ 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
@@ -397,7 +375,6 @@ rotate_db() {
} }
create_db() { create_db() {
TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE")
# $LOCKFILE is already guaranteed to be absolute so this is safe # $LOCKFILE is already guaranteed to be absolute so this is safe
dirname=${LOCKFILE%/*} dirname=${LOCKFILE%/*}
@@ -406,13 +383,13 @@ create_db() {
tempname=$dirname/.tmp.$filename tempname=$dirname/.tmp.$filename
pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null
if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then local files=(*)
bsdtar -c"${TAR_OPT}"f "$tempname" * if [[ ${files[*]} = '*' ]]; then
else
# we have no packages remaining? zip up some emptyness # we have no packages remaining? zip up some emptyness
warning "No packages remain, creating empty database." warning "No packages remain, creating empty database."
bsdtar -c"${TAR_OPT}"f "$tempname" -T /dev/null files=(-T /dev/null)
fi fi
bsdtar -cf - "${files[@]}" | compress_as "$filename" > "$tempname"
popd >/dev/null popd >/dev/null
create_signature "$tempname" create_signature "$tempname"
@@ -476,7 +453,6 @@ 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
@@ -494,7 +470,7 @@ else
LOCKFILE=$PWD/$REPO_DB_FILE.lck LOCKFILE=$PWD/$REPO_DB_FILE.lck
fi fi
verify_repo_extension "$REPO_DB_FILE" >/dev/null verify_repo_extension "$REPO_DB_FILE"
REPO_DB_PREFIX=${REPO_DB_FILE##*/} REPO_DB_PREFIX=${REPO_DB_FILE##*/}
REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*} REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*}

View File

@@ -15,6 +15,9 @@
m4_include(lib/base/message.sh) m4_include(lib/base/message.sh)
m4_include(lib/base/chroot.sh) m4_include(lib/base/chroot.sh)
export BUILDTOOL=artools-pkg
export BUILDTOOLVER=m4_artools_pkg_version
shopt -s nullglob shopt -s nullglob
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg) default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
@@ -193,6 +196,8 @@ EOF
printf '#!/bin/bash\n' printf '#!/bin/bash\n'
declare -f _chrootbuild declare -f _chrootbuild
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
declare -p BUILDTOOL 2>/dev/null
declare -p BUILDTOOLVER 2>/dev/null
printf '_chrootbuild "$@" || exit\n' printf '_chrootbuild "$@" || exit\n'
if (( run_namcap )); then if (( run_namcap )); then
@@ -218,7 +223,10 @@ _chrootbuild() {
# use "$" in arguments to commands with "sudo -i". ${foo} or # use "$" in arguments to commands with "sudo -i". ${foo} or
# ${1} is OK, but $foo or $1 isn't. # ${1} is OK, but $foo or $1 isn't.
# https://bugzilla.sudo.ws/show_bug.cgi?id=765 # https://bugzilla.sudo.ws/show_bug.cgi?id=765
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@" sudo --preserve-env=SOURCE_DATE_EPOCH \
-preserve-env=BUILDTOOL \
--preserve-env=BUILDTOOLVER \
-iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
ret=$? ret=$?
case $ret in case $ret in
0|14) 0|14)
@@ -241,12 +249,21 @@ download_sources() {
chown "$makepkg_user:" "$WORKDIR" chown "$makepkg_user:" "$WORKDIR"
# Ensure sources are downloaded # Ensure sources are downloaded
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \ sudo -u "$makepkg_user" --preserve-env=GNUPGHOME,SSH_AUTH_SOCK \
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."
} }
move_logfiles() {
local l
for l in "$copydir"/logdest/*; do
[[ $l == */logpipe.* ]] && continue
chown "$src_owner" "$l"
mv "$l" "$LOGDEST"
done
}
move_products() { move_products() {
local pkgfile local pkgfile
for pkgfile in "$copydir"/pkgdest/*; do for pkgfile in "$copydir"/pkgdest/*; do
@@ -259,12 +276,7 @@ move_products() {
fi fi
done done
local l move_logfiles
for l in "$copydir"/logdest/*; do
[[ $l == */logpipe.* ]] && continue
chown "$src_owner" "$l"
mv "$l" "$LOGDEST"
done
for s in "$copydir"/srcpkgdest/*; do for s in "$copydir"/srcpkgdest/*; do
chown "$src_owner" "$s" chown "$src_owner" "$s"
@@ -301,7 +313,7 @@ done
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER check_root SOURCE_DATE_EPOCH,BUILDTOOL,BUILDTOOLVER,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
# Canonicalize chrootdir, getting rid of trailing / # Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir") chrootdir=$(readlink -e "$passeddir")
@@ -379,6 +391,7 @@ then
move_products move_products
else else
(( ret += 1 )) (( ret += 1 ))
move_logfiles
fi fi
(( temp_chroot )) && delete_chroot "$copydir" "$copy" (( temp_chroot )) && delete_chroot "$copydir" "$copy"

View File

@@ -8,8 +8,14 @@
# the dist release; default: auto # the dist release; default: auto
# ISO_VERSION=$(date +%Y%m%d) # ISO_VERSION=$(date +%Y%m%d)
# possible values: openrc, runit, s6 # possible values: openrc, runit, s6, suite66, dinit
# INITSYS="openrc" # INITSYS="openrc"
# gpg key; leave empty or commented to skip img signing # gpg key; leave empty or commented to skip img signing
# GPG_KEY="" # GPG_KEY=""
# possible values: zstd (default), xz
# COMPRESSION="zstd"
# zstd only: range 1..22
# COMPRESSION_LEVEL=15

View File

@@ -10,25 +10,38 @@
# customize buildtree; uncomment to include # customize buildtree; uncomment to include
# TREE_NAMES_ARTIX=( # TREE_NAMES_ARTIX=(
# packages-kernel # packages-kernel
# packages-llvm
# packages-openrc # packages-openrc
# packages-runit # packages-runit
# packages-s6 # packages-s6
# packages-python # packages-suite66
# packages-dinit
# packages-perl # packages-perl
# packages-java # packages-java
# packages-ruby # packages-ruby
# packages-kf5 # packages-gtk
# packages-qt5
# packages-qt6
# packages-xorg
# packages-plasma # packages-plasma
# packages-kde # packages-kde
# packages-gnome # packages-gnome
# packages-cinnamon # packages-cinnamon
# packages-lxqt # packages-lxqt
# packages-lxde
# packages-mate # packages-mate
# packages-xfce # packages-xfce
# packages-wm # packages-wm
# packages-devel # packages-devel
# packages-lib32
# packages-qt6 # packages-qt6
# packages-office
# packages-misc
# python-world
# python-galaxy
# python-galaxy-groups
# python-misc
# packages-python
# packages-lib32
# ) # )
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux # TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux

View File

@@ -11,10 +11,10 @@
# #
#-- The download utilities that makepkg should use to acquire sources #-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent' # Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u' DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u' 'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' 'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' 'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o' 'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o') 'scp::/usr/bin/scp -C %u %o')
@@ -26,6 +26,7 @@ DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
#-- The package required by makepkg to download VCS sources #-- The package required by makepkg to download VCS sources
# Format: 'protocol::package' # Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr' VCSCLIENTS=('bzr::bzr'
'fossil::fossil'
'git::git' 'git::git'
'hg::mercurial' 'hg::mercurial'
'svn::subversion') 'svn::subversion')
@@ -38,21 +39,25 @@ CARCH="x86_64"
CHOST="x86_64-pc-linux-gnu" CHOST="x86_64-pc-linux-gnu"
#-- Compiler and Linker Flags #-- Compiler and Linker Flags
CPPFLAGS="-D_FORTIFY_SOURCE=2" #CPPFLAGS=""
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection"
CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
#RUSTFLAGS="-C opt-level=2"
#-- Make Flags: change this for DistCC/SMP systems #-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2" #MAKEFLAGS="-j2"
#-- Debugging flags #-- Debugging flags
DEBUG_CFLAGS="-g -fvar-tracking-assignments" DEBUG_CFLAGS="-g -fvar-tracking-assignments"
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments" DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
#DEBUG_RUSTFLAGS="-C debuginfo=2"
######################################################################### #########################################################################
# BUILD ENVIRONMENT # BUILD ENVIRONMENT
######################################################################### #########################################################################
# #
# Defaults: BUILDENV=(!distcc !color !ccache check !sign) # Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign)
# A negated environment option will do the opposite of the comments below. # A negated environment option will do the opposite of the comments below.
# #
#-- distcc: Use the Distributed C/C++/ObjC compiler #-- distcc: Use the Distributed C/C++/ObjC compiler
@@ -75,7 +80,7 @@ BUILDENV=(!distcc color !ccache check !sign)
# These are default values for the options=() settings # These are default values for the options=() settings
######################################################################### #########################################################################
# #
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug) # Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto)
# A negated option will do the opposite of the comments below. # A negated option will do the opposite of the comments below.
# #
#-- strip: Strip symbols from binaries/libraries #-- strip: Strip symbols from binaries/libraries
@@ -86,11 +91,12 @@ BUILDENV=(!distcc color !ccache check !sign)
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip #-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge: Remove files specified by PURGE_TARGETS #-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables #-- debug: Add debugging flags as specified in DEBUG_* variables
#-- lto: Add compile flags for building with link time optimization
# #
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug) OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512 #-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2
INTEGRITY_CHECK=(md5) INTEGRITY_CHECK=(sha256)
#-- Options to be used when stripping binaries. See `man strip' for details. #-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all" STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details. #-- Options to be used when stripping shared libraries. See `man strip' for details.
@@ -146,4 +152,10 @@ COMPRESSLZ=(lzip -c -f)
PKGEXT='.pkg.tar.zst' PKGEXT='.pkg.tar.zst'
SRCEXT='.src.tar.gz' SRCEXT='.src.tar.gz'
#########################################################################
# OTHER
#########################################################################
#
#-- Command used to run pacman as root, instead of trying sudo and su
#PACMAN_AUTH=()
# vim: set ft=sh ts=2 sw=2 et: # vim: set ft=sh ts=2 sw=2 et:

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -83,15 +85,6 @@ Include = /etc/pacman.d/mirrorlist
[galaxy] [galaxy]
Include = /etc/pacman.d/mirrorlist 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-gremlins]
#Include = /etc/pacman.d/mirrorlist
#[lib32]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]

View File

@@ -38,10 +38,11 @@ NoExtract = usr/share/vim/vim*/lang/*
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -51,7 +52,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -96,16 +97,3 @@ Include = /etc/pacman.d/mirrorlist
#[custom] #[custom]
#SigLevel = Optional TrustAll #SigLevel = Optional TrustAll
#Server = file:///home/custompkgs #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

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -92,18 +94,6 @@ Include = /etc/pacman.d/mirrorlist
[galaxy] [galaxy]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.
#[lib32-goblins]
#Include = /etc/pacman.d/mirrorlist
#[lib32-gremlins]
#Include = /etc/pacman.d/mirrorlist
#[lib32]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -89,18 +91,6 @@ Include = /etc/pacman.d/mirrorlist
[galaxy] [galaxy]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.
#[lib32-goblins]
#Include = /etc/pacman.d/mirrorlist
#[lib32-gremlins]
#Include = /etc/pacman.d/mirrorlist
#[lib32]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -83,15 +85,6 @@ Include = /etc/pacman.d/mirrorlist
[galaxy] [galaxy]
Include = /etc/pacman.d/mirrorlist 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-gremlins]
#Include = /etc/pacman.d/mirrorlist
#[lib32]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES
@@ -92,18 +94,6 @@ Include = /etc/pacman.d/mirrorlist
[galaxy] [galaxy]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the lib32 repositories as required here.
#[lib32-goblins]
#Include = /etc/pacman.d/mirrorlist
#[lib32-gremlins]
#Include = /etc/pacman.d/mirrorlist
#[lib32]
#Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for # An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories. # tips on creating your own repositories.
#[custom] #[custom]

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -31,9 +31,11 @@ Architecture = auto
# Misc options # Misc options
#UseSyslog #UseSyslog
#Color #Color
#TotalDownload NoProgressBar
CheckSpace # We cannot check disk space from within a chroot environment
#CheckSpace
VerbosePkgLists VerbosePkgLists
ParallelDownloads = 5
# By default, pacman accepts packages signed by keys that its local keyring # 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. # trusts (see pacman-key and its man page), as well as unsigned packages.
@@ -43,7 +45,7 @@ LocalFileSigLevel = Optional
# NOTE: You must run `pacman-key --init` before first using pacman; the local # 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 # keyring can then be populated with the keys of all official Artix Linux
# packagers with `pacman-key --populate archlinux artix`. # packagers with `pacman-key --populate artix`.
# #
# REPOSITORIES # REPOSITORIES

View File

@@ -1,23 +0,0 @@
DIRMODE = -dm0755
MODE = -m0755
CPIOHOOKS = \
$(wildcard hooks/*)
CPIOINST = \
$(wildcard install/*)
SCRIPT = \
$(wildcard script/*)
install_initcpio:
install $(DIRMODE) $(DESTDIR)$(CPIODIR)/hooks
install $(MODE) $(CPIOHOOKS) $(DESTDIR)$(CPIODIR)/hooks
install $(DIRMODE) $(DESTDIR)$(CPIODIR)/install
install $(MODE) $(CPIOINST) $(DESTDIR)$(CPIODIR)/install
install $(MODE) $(SCRIPT) $(DESTDIR)$(CPIODIR)
install: install_initcpio
.PHONY: install

View File

@@ -1,275 +0,0 @@
# args: source, newroot, mountpoint
_mnt_dmsnapshot() {
local img="${1}"
local mnt="${2}"
local img_fullname="${img##*/}";
local img_name="${img_fullname%%.*}"
local dm_snap_name="${dm_snap_prefix}_${img_name}"
local ro_dev ro_dev_size rw_dev
ro_dev=$(losetup --find --show --read-only "${img}")
echo ${ro_dev} >> ${live_root}/used_block_devices
ro_dev_size=$(blockdev --getsz ${ro_dev})
if [[ "${cow_persistent}" == "P" ]]; then
if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '${cow}/${cow_directory}/${img_name}.cow', using as persistent."
else
msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as persistent."
truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
fi
else
if [[ -f "${cow}/${cow_directory}/${img_name}.cow" ]]; then
msg ":: Found '${cow}/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
rm -f "${cow}/${cow_directory}/${img_name}.cow"
fi
msg ":: Creating '${cow}/${cow_directory}/${img_name}.cow' as non-persistent."
truncate -s "${cow_spacesize}" "${cow}/${cow_directory}/${img_name}.cow"
fi
rw_dev=$(losetup --find --show "${cow}/${cow_directory}/${img_name}.cow")
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}"
if [[ "${cow_persistent}" != "P" ]]; then
rm -f "${cow}/${cow_directory}/${img_name}.cow"
fi
_mnt_dev "/dev/mapper/${dm_snap_name}" "${mnt}" "-w" "defaults"
echo $(readlink -f /dev/mapper/${dm_snap_name}) >> ${live_root}/used_block_devices
}
# args: source, newroot, mountpoint
_mnt_overlayfs() {
local src="${1}"
local newroot="${2}"
local mnt="${3}"
local work_dir="${overlay_root}/work"
local upper_dir="${overlay_root}/upper"
mkdir -p "${upper_dir}" "${work_dir}"
mount -t overlay overlay -o lowerdir="${src}",upperdir="${upper_dir}",workdir="${work_dir}" "${newroot}${mnt}"
}
# args: /path/to/image_file, mountpoint
_mnt_sfs() {
local img="${1}"
local mnt="${2}"
local img_fullname="${img##*/}"
local sfs_dev
local oper=$( [[ -n "${ip}" && -n "${miso_http_srv}" ]] && echo "mv" || echo "cp" )
if [[ "${copytoram}" == "y" ]]; then
msg -n ":: Copying squashfs image to RAM..."
if ! "${oper}" "${img}" "${cp2ram}/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '${cp2ram}/${img_fullname}'"
launch_interactive_shell
fi
img="${cp2ram}/${img_fullname}"
msg "done."
fi
sfs_dev=$(losetup --find --show --read-only "${img}")
echo ${sfs_dev} >> ${live_root}/used_block_devices
_mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults"
}
# args: device, mountpoint, flags, opts
_mnt_dev() {
local dev="${1}"
local mnt="${2}"
local flg="${3}"
local opts="${4}"
mkdir -p "${mnt}"
msg ":: Mounting '${dev}' to '${mnt}'"
while ! poll_device "${dev}" 30; do
echo "ERROR: '${dev}' device did not show up after 30 seconds..."
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
done
if mount -o "${opts}" "${flg}" "${dev}" "${mnt}"; then
msg ":: Device '${dev}' mounted successfully."
else
echo "ERROR; Failed to mount '${dev}'"
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
fi
}
_verify_checksum() {
local _status
cd "${bootmnt}/${root}"
sha512sum -c $1.img.sha512 > /tmp/checksum.log 2>&1
_status=$?
cd "${OLDPWD}"
return ${_status}
}
_verify_signature() {
local _status
cd "${bootmnt}/${root}"
gpg --homedir /gpg --status-fd 1 --verify $1.img.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
_status=$?
cd "${OLDPWD}"
return ${_status}
}
run_hook() {
[[ -z "${copytoram_size}" ]] && copytoram_size="75%"
[[ -z "${root}" ]] && root="LiveOS"
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="artix"
[[ -z "${artixdevice}" ]] && artixdevice="/dev/disk/by-label/${label}"
[[ -z "${cow_spacesize}" ]] && cow_spacesize="256M"
[[ -z "${overlay_root_size}" ]] && overlay_root_size="75%"
if [[ -n "${cow_label}" ]]; then
cow_device="/dev/disk/by-label/${cow_label}"
[[ -z "${cow_persistent}" ]] && cow_persistent="P"
elif [[ -n "${cow_device}" ]]; then
[[ -z "${cow_persistent}" ]] && cow_persistent="P"
else
cow_persistent="N"
fi
[[ -z "${cow_flags}" ]] && cow_flags="defaults"
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${label}"
[[ -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
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
# as chain from other mount handlers.
# args: /path/to/newroot
artix_mount_handler() {
local newroot="${1}"
if ! mountpoint -q "${bootmnt}"; then
_mnt_dev "${artixdevice}" "${bootmnt}" "-r" "defaults"
if [[ "${copytoram}" != "y" ]]; then
echo $(readlink -f ${artixdevice}) >> ${live_root}/used_block_devices
fi
fi
if [[ "${checksum}" == "y" ]]; then
_check_sum "rootfs"
[[ -n "${overlay}" ]] && _check_sum "${overlay}"
fi
if [[ "${verify}" == "y" ]]; then
_check_sig "rootfs"
[[ -n "${overlay}" ]] && _check_sig "${overlay}"
fi
if [[ "${copytoram}" == "y" ]]; then
msg ":: Mounting ${cp2ram} (tmpfs) filesystem, size=${copytoram_size}"
mkdir -p ${cp2ram}
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram ${cp2ram}
fi
if [[ -n "${cow_device}" ]]; then
_mnt_dev "${cow_device}" "${cow}" "-r" "${cow_flags}"
echo $(readlink -f ${cow_device}) >> ${live_root}/used_block_devices
mount -o remount,rw "${cow}"
else
msg ":: Mounting ${cow} (tmpfs) filesystem, size=${cow_spacesize}..."
mkdir -p ${cow}
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace ${cow}
fi
mkdir -p -m 0700 "${cow}/${cow_directory}"
msg -n ":: Mounting overlay root (tmpfs) filesystem, size=${overlay_root_size}..."
mkdir -p ${overlay_root}
mount -t tmpfs -o "size=${overlay_root_size}",mode=0755 overlay_root ${overlay_root}
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
_mount_root_overlayfs "rootfs"
_mnt_overlayfs "${lower_dir}" "${newroot}" "/"
if [[ "${copytoram}" == "y" ]]; then
umount -d ${bootmnt}
mkdir -p ${bootmnt}/${root}
mount -o bind ${cp2ram} ${bootmnt}/${root}
fi
}
# vim:ft=sh:ts=4:sw=4:et:

View File

@@ -1,35 +0,0 @@
# vim: set ft=sh:
run_hook () {
[[ -n "${img_label}" ]] && img_dev="/dev/disk/by-label/${img_label}"
[[ -z "${img_flags}" ]] && img_flags="defaults"
if [[ -n "${img_dev}" && -n "${img_loop}" ]]; then
mount_handler="artix_loop_mount_handler"
fi
}
artix_loop_mount_handler () {
newroot="${1}"
local _dev_loop
msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}"
_mnt_dev "${img_dev}" "${live_root}/img_dev" "-r" "${img_flags}"
if [[ "${copytoram}" != "y" ]]; then
echo $(readlink -f ${img_dev}) >> ${live_root}/used_block_devices
fi
if _dev_loop=$(losetup --find --show --read-only "${live_root}/img_dev/${img_loop}"); then
artixdevice="${_dev_loop}"
else
echo "ERROR: Setting loopback device for file '${live_root}/img_dev/${img_loop}'"
launch_interactive_shell
fi
artix_mount_handler ${newroot}
if [[ "${copytoram}" == "y" ]]; then
losetup -d ${_dev_loop} 2>/dev/null
umount ${live_root}/img_dev
fi
}

View File

@@ -1,72 +0,0 @@
# vim: set ft=sh:
run_hook () {
# Do *not* declare 'bootif_dev' local! We need it in run_latehook().
local i net_mac bootif_mac
# These variables will be parsed from /tmp/net-*.conf generated by ipconfig
local DEVICE
local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
local filename
# /tmp/net-*.conf
if [[ -n "${ip}" ]]; then
if [[ -n "${BOOTIF}" ]]; then
bootif_mac=${BOOTIF#01-}
bootif_mac=${bootif_mac//-/:}
for i in /sys/class/net/*/address; do
read net_mac < ${i}
if [[ "${bootif_mac}" == "${net_mac}" ]]; then
bootif_dev=${i#/sys/class/net/}
bootif_dev=${bootif_dev%/address}
break
fi
done
if [[ "${ip}" == "dhcp" ]]; then
ip=":::::${bootif_dev}:dhcp"
else
ip="${ip}::${bootif_dev}"
fi
fi
# setup network and save some values
if ! ipconfig -t 20 "ip=${ip}"; then
echo "ERROR; Failed to configure network"
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
fi
. /tmp/net-*.conf
pxeserver=${ROOTSERVER}
# setup DNS resolver
if [[ "${IPV4DNS0}" != "0.0.0.0" ]]; then
echo "# added by artix_pxe_common hook" > /etc/resolv.conf
echo "nameserver ${IPV4DNS0}" >> /etc/resolv.conf
fi
if [[ "${IPV4DNS1}" != "0.0.0.0" ]]; then
echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf
fi
if [[ -n "${DNSDOMAIN}" ]]; then
echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
echo "domain ${DNSDOMAIN}" >> /etc/resolv.conf
fi
fi
}
run_latehook () {
if [[ -n "${ip}" ]]; then
[[ -z "${copy_resolvconf}" ]] && copy_resolvconf="y"
if [[ "${copytoram}" == "y" ]]; then
if [[ -n "${bootif_dev}" ]]; then
ip addr flush dev "${bootif_dev}"
ip link set "${bootif_dev}" down
fi
elif [[ "${copy_resolvconf}" != "n" && -f /etc/resolv.conf ]]; then
cp /etc/resolv.conf /new_root/etc/resolv.conf
fi
fi
}

View File

@@ -1,63 +0,0 @@
# vim: set ft=sh:
run_hook() {
if [[ -n "${ip}" && -n "${artix_http_srv}" ]]; then
# booting with http is always copy-to-ram, so set here to make sure
# addresses are flushed and interface is set down
copytoram="y"
artix_http_srv=$(eval echo ${artix_http_srv})
[[ -z "${artix_http_spc}" ]] && artix_http_spc="75%"
mount_handler="artix_pxe_http_mount_handler"
fi
}
# Fetch a file with CURL
#
# $1 URL
# $2 Destination directory inside httpspace/${root}
_curl_get() {
local _url="${1}"
local _dst="${2}"
msg ":: Downloading '${_url}'"
if ! curl -L -f -o "${live_root}/httpspace/${root}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
echo "ERROR: Downloading '${_url}'"
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
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 () {
newroot="${1}"
msg ":: Mounting ${live_root}/httpspace (tmpfs) filesystem, size='${artix_http_spc}'"
mkdir -p "${live_root}/httpspace"
mount -t tmpfs -o size="${artix_http_spc}",mode=0755 httpspace "${live_root}/httpspace"
_get_sfs "rootfs"
[[ -n "${overlay}" ]] && _mount_root_overlayfs "${overlay}"
mkdir -p "${bootmnt}"
mount -o bind ${live_root}/httpspace ${bootmnt}
artix_mount_handler ${newroot}
}

View File

@@ -1,47 +0,0 @@
# vim: set ft=sh:
run_earlyhook() {
if [[ -n "${ip}" && -n "${artix_nbd_srv}" ]]; then
# Module autoloading like with loop devices does not work, doing manually...
modprobe nbd 2> /dev/null
fi
}
run_hook() {
if [[ -n "${ip}" && -n "${artix_nbd_srv}" ]]; then
artix_nbd_srv=$(eval echo ${artix_nbd_srv})
[[ -z "${artix_nbd_name}" ]] && artix_nbd_name="artix"
mount_handler="artix_pxe_nbd_mount_handler"
fi
}
artix_pxe_nbd_mount_handler () {
newroot="${1}"
msg ":: Waiting for boot device..."
while ! poll_device /dev/nbd0 30; do
echo "ERROR: boot device didn't show up after 30 seconds..."
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
done
msg ":: Setup NBD from ${artix_nbd_srv} at /dev/nbd0"
if [[ "${copytoram}" != "n" ]]; then
nbd-client ${artix_nbd_srv} -N ${artix_nbd_name} /dev/nbd0
copytoram="y"
else
nbd-client ${artix_nbd_srv} -N ${artix_nbd_name} -persist /dev/nbd0
fi
artixdevice=/dev/nbd0
artix_mount_handler ${newroot}
if [[ "${copytoram}" == "y" ]]; then
msg ":: Disconnect NBD from ${artix_nbd_srv} at /dev/nbd0"
nbd-client -d /dev/nbd0
fi
}

View File

@@ -1,30 +0,0 @@
# vim: set ft=sh:
run_hook() {
if [[ -n "${ip}" && -n "${artix_nfs_srv}" ]]; then
artix_nfs_srv=$(eval echo ${artix_nfs_srv})
[[ -n "${artix_nfs_opt}" ]] && artix_nfs_opt="-o ${artix_nfs_opt}"
mount_handler="artix_nfs_mount_handler"
fi
}
artix_nfs_mount_handler() {
newroot="${1}"
mkdir -p "${bootmnt}"
msg ":: Mounting '${artix_nfs_srv}'"
# Do not put "${artix_nfs_opt}" nfsmount fails!
if ! nfsmount ${artix_nfs_opt} "${artix_nfs_srv}" "${bootmnt}"; then
echo "ERROR: Mounting '${artix_nfs_srv}'"
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
fi
if [[ "${copytoram}" != "n" ]]; then
copytoram="y"
fi
artix_mount_handler ${newroot}
}

View File

@@ -1,6 +0,0 @@
run_cleanuphook() {
rm -rf /usr/lib/modules
cp -ax / /run/initramfs
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,30 +0,0 @@
#!/bin/bash
build() {
add_module "cdrom"
add_module "loop"
add_module "dm-snapshot"
add_module "overlay"
add_runscript
add_binary /usr/lib/udev/cdrom_id
add_binary blockdev
add_binary dmsetup
add_binary losetup
add_binary mountpoint
add_binary truncate
add_binary gpg
add_binary grep
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
add_file /usr/lib/udev/rules.d/10-dm.rules
add_file /usr/lib/udev/rules.d/95-dm-notify.rules
add_file /usr/lib/initcpio/udev/11-dm-initramfs.rules /usr/lib/udev/rules.d/11-dm-initramfs.rules
if [[ $ARTIX_GNUPG_FD ]]; then
mkdir -p "$BUILDROOT$dest"/gpg
gpg --homedir "$BUILDROOT$dest"/gpg --import <&$ARTIX_GNUPG_FD
fi
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,16 +0,0 @@
#!/bin/bash
build() {
add_module "radeon"
add_module "nouveau"
add_module "i915"
add_module "via-agp"
add_module "sis-agp"
add_module "intel-agp"
}
help() {
cat << HELPEOF
Adds all common KMS drivers to the initramfs image.
HELPEOF
}

View File

@@ -1,13 +0,0 @@
#!/bin/bash
build() {
add_runscript
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via loop device.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,26 +0,0 @@
#!/bin/bash
build() {
add_checked_modules -f "(irda|phy|wimax|wireless|ppp_|plip|pppoe)" "/drivers/net/"
add_runscript
add_binary /usr/lib/initcpio/ipconfig /bin/ipconfig
# Add hosts support files+dns
add_symlink /usr/lib/libnss_files.so.2 $(readlink /usr/lib/libnss_files.so.2)
add_binary $(readlink -f /usr/lib/libnss_files.so.2)
add_symlink /usr/lib/libnss_dns.so.2 $(readlink /usr/lib/libnss_dns.so.2)
add_binary $(readlink -f /usr/lib/libnss_dns.so.2)
add_dir /etc
echo "hosts: files dns" > $BUILDROOT/etc/nsswitch.conf
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,17 +0,0 @@
#!/bin/bash
build() {
add_runscript
add_binary curl
add_file $(readlink -f /etc/ssl/certs/ca-certificates.crt) /etc/ssl/certs/ca-certificates.crt
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and HTTP.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,17 +0,0 @@
#!/bin/bash
build() {
add_module "nbd"
add_runscript
add_binary nbd-client
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and NBD.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,17 +0,0 @@
#!/bin/bash
build() {
add_module "nfs"
add_runscript
add_binary /usr/lib/initcpio/nfsmount /bin/nfsmount
}
help() {
cat <<HELPEOF
This hook loads the necessary modules for boot via PXE and NFS.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,20 +0,0 @@
#!/bin/bash
build() {
add_binary cp
add_runscript
add_file /etc/initcpio/artix_shutdown /shutdown
}
help() {
cat <<HELPEOF
This hook will create a shutdown initramfs in /run/initramfs
that we can pivot to on shutdown in order to unmount / and
and others mount points, dm-snapshot devices and loopback devices.
Mostly usefull for dm-snapshot persistent.
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et:

View File

@@ -1,37 +0,0 @@
#!/bin/ash
# /oldroot depends on things inside /oldroot/run/artix...
mkdir /oldrun
mount -n --move /oldroot/run /oldrun
# Unmount all mounts now.
umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)
# Remove all dm-snapshot devices.
dmsetup remove_all
# Remove all loopback devices.
for _lup in $(grep ^/dev/loop /oldrun/artix/used_block_devices | tac); do
if ! losetup -d ${_lup} 2> /dev/null; then
umount -d ${_lup}
fi
done
# Unmount the space used to store *.cow.
umount /oldrun/artix/cowspace
# Unmount boot device if needed (no copytoram=y used)
if [[ ! -d /oldrun/artix/copytoram ]]; then
if [[ -d /oldrun/artix/img_dev ]]; then
umount /oldrun/artix/img_dev
else
umount /oldrun/bootmnt
fi
fi
# reboot / poweroff / halt, depending on the argument passed by init
# if something invalid is passed, we halt
case "$1" in
reboot|poweroff|halt) "$1" -f ;;
*) halt -f;;
esac

View File

@@ -2,30 +2,6 @@
#{{{ calamares #{{{ calamares
write_users_conf(){
local yaml
yaml=$(write_yaml_header)
yaml+=$(write_yaml_map 0 'defaultGroups')
local IFS=','
for g in "${ADDGROUPS[@]}"; do
yaml+=$(write_yaml_seq 2 "$g")
done
unset IFS
yaml+=$(write_yaml_map 0 'autologinGroup' 'autologin')
yaml+=$(write_yaml_map 0 'doAutologin' 'false')
yaml+=$(write_yaml_map 0 'sudoersGroup' 'wheel')
yaml+=$(write_yaml_map 0 'setRootPassword' 'true')
yaml+=$(write_yaml_map 0 'availableShells' '/bin/bash, /bin/zsh')
# yaml+=$(write_yaml_map 0 'passwordRequirements')
# yaml+=$(write_yaml_map 2 'minLength' '-1')
# yaml+=$(write_yaml_map 2 'maxLength' '-1')
# yaml+=$(write_yaml_map 2 'libpwquality')
# yaml+=$(write_yaml_seq 4 "minlen=8")
# yaml+=$(write_yaml_seq 4 "minclass=80")
yaml+=$(write_empty_line)
printf '%s' "${yaml}"
}
write_services_conf(){ write_services_conf(){
local key1="$1" val1="$2" key2="$3" val2="$4" local key1="$1" val1="$2" key2="$3" val2="$4"
local yaml local yaml
@@ -55,41 +31,21 @@ write_services_s6_conf(){
write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf" write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf"
} }
write_postcfg(){ write_services_suite66_conf(){
local yaml local conf="$1"/services-suite66.conf
yaml=$(write_yaml_header) write_services_conf 'svDir' '/etc/66/service' 'runsvDir' '/var/lib/66/system' > "$conf"
yaml+=$(write_yaml_map 0 'keyrings')
for k in archlinux artix;do
yaml+=$(write_yaml_seq 2 "$k")
done
yaml+=$(write_empty_line)
printf '%s' "${yaml}"
} }
write_unpackfs() { write_services_dinit_conf(){
local yaml local conf="$1"/services-dinit.conf
yaml=$(write_yaml_header) write_services_conf 'initdDir' '/etc/dinit.d' 'runsvDir' '/etc/dinit.d/boot.d' > "$conf"
yaml+=$(write_yaml_map 0 'unpack')
# if ${persist}; then
# yaml+=$(write_yaml_seq_map 2 'source' '"/run/artix/bootmnt/LiveOS/rootfs.img"')
# 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)
printf '%s' "${yaml}"
} }
configure_calamares(){ configure_calamares(){
local mods="$1/etc/calamares/modules" local mods="$1/etc/calamares/modules"
if [[ -d "$mods" ]];then if [[ -d "$mods" ]];then
msg2 "Configuring: Calamares" msg2 "Configuring: Calamares"
write_users_conf > "$mods"/users.conf
write_services_"${INITSYS}"_conf "$mods" write_services_"${INITSYS}"_conf "$mods"
write_postcfg > "$mods"/postcfg.conf
write_unpackfs > "$mods"/unpackfs.conf
sed -e "s|services-openrc|services-${INITSYS}|" \ sed -e "s|services-openrc|services-${INITSYS}|" \
-i "$1"/etc/calamares/settings.conf -i "$1"/etc/calamares/settings.conf
fi fi

View File

@@ -2,46 +2,23 @@
#{{{ session #{{{ session
configure_hosts(){
sed -e "s|localhost.localdomain|localhost.localdomain ${HOST_NAME}|" -i "$1"/etc/hosts
}
configure_logind(){
local conf=$1/etc/elogind/logind.conf
if [[ -e "$conf" ]];then
msg2 "Configuring: logind"
sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf"
sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf"
sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf"
fi
}
configure_services(){ configure_services(){
local mnt="$1" local mnt="$1"
add_svc_"${INITSYS}" "$mnt" "${SERVICES[*]} ${SERVICES_LIVE[*]}" add_svc_"${INITSYS}" "$mnt" "${SERVICES[*]}"
} }
configure_system(){
local mnt="$1"
configure_logind "$mnt"
echo "${HOST_NAME}" > "$mnt"/etc/hostname
}
write_live_session_conf(){ write_live_session_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}")
conf+=$(printf "\nUSER_NAME=%s\n" "${USER_NAME}")
conf+=$(printf "\nPASSWORD=%s\n" "${PASSWORD}") conf+=$(printf "\nPASSWORD=%s\n" "${PASSWORD}")
conf+=$(printf "\nADDGROUPS='%s'\n" "${ADDGROUPS}")
printf '%s' "$conf" printf '%s' "$conf"
} }
configure_chroot(){ configure_chroot(){
local fs="$1" local fs="$1"
msg "Configuring [%s]" "${fs##*/}" msg "Configuring [%s]" "${fs##*/}"
configure_hosts "$fs"
configure_system "$fs"
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"

View File

@@ -10,7 +10,7 @@ prepare_initramfs_dracut(){
printf "%s\n" 'add_dracutmodules+=" dmsquash-live"' > "$mnt"/etc/dracut.conf.d/50-live.conf printf "%s\n" 'add_dracutmodules+=" dmsquash-live"' > "$mnt"/etc/dracut.conf.d/50-live.conf
msg "Starting build: %s" "${kver}" msg "Starting build: %s" "${kver}"
artools-chroot "$mnt" dracut -fqM /boot/initramfs.img "$kver" artix-chroot "$mnt" dracut -fqM /boot/initramfs.img "$kver"
msg "Image generation successful" msg "Image generation successful"
cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${arch}".img cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${arch}".img

View File

@@ -2,20 +2,6 @@
#{{{ grub #{{{ grub
configure_grub(){
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 local lib="$1"/usr/lib/grub
@@ -23,7 +9,6 @@ prepare_grub(){
local livecfg="$2"/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 "${livecfg}"/cfg/*.cfg "${grub}" cp "${livecfg}"/cfg/*.cfg "${grub}"

View File

@@ -2,56 +2,71 @@
#{{{ initcpio #{{{ initcpio
write_mkinitcpio_conf() { make_checksum(){
msg2 "Writing mkinitcpio.conf ..." local file="$1"
local conf="$1/etc/mkinitcpio-artix.conf" msg2 "Creating md5sum ..."
printf "%s\n" 'MODULES=(loop dm-snapshot)' > "$conf" cd "${iso_root}${live_dir}"
printf "%s\n" 'COMPRESSION="xz"' >> "$conf" md5sum "$file" > "$file".md5
if [[ "${profile}" == 'base' ]];then cd "${OLDPWD}"
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" make_sig () {
else local file="$1"
printf "%s\n" 'HOOKS=(base udev artix_shutdown artix artix_loop_mnt msg2 "Creating signature file..."
artix_kms modconf block filesystems keyboard keymap)' >> "$conf" chown "${owner}:$(id --group "${owner}")" "${iso_root}${live_dir}"
su "${owner}" -c "gpg --detach-sign --output $file.sig --default-key ${GPG_KEY} $file"
chown "root:root" "${iso_root}${live_dir}"
}
export_gpg_publickey() {
key_export=${WORKSPACE_DIR}/pubkey.gpg
if [[ ! -e "${key_export}" ]]; then
gpg --batch --output "${key_export}" --export "${GPG_KEY}"
fi fi
} }
prepare_initcpio(){ prepare_initramfs_mkinitcpio() {
msg2 "Copying initcpio ..." local mnt="$1" packages=() mkinitcpio_conf k
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(){ mkinitcpio_conf=mkinitcpio-default.conf
local mnt="$1" [[ "${profile}" == 'base' ]] && mkinitcpio_conf=mkinitcpio-pxe.conf
k=$(<"$mnt"/usr/src/linux/version)
prepare_initcpio "$mnt" read_from_list "${common_dir}/Packages-boot"
basestrap "${basestrap_args[@]}" "$mnt" "${packages[@]}"
write_mkinitcpio_conf "$mnt" if [[ -n "${GPG_KEY}" ]]; then
exec {ARTIX_GNUPG_FD}<>"${key_export}"
if [[ -n ${GPG_KEY} ]]; then export ARTIX_GNUPG_FD
su "${owner}" -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY
fi fi
local _kernel
_kernel=$(<"$mnt"/usr/src/linux/version) artix-chroot "$mnt" mkinitcpio -k "$k" \
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot "$mnt" \ -c /etc/"$mkinitcpio_conf" \
/usr/bin/mkinitcpio -k "${_kernel}" \
-c /etc/mkinitcpio-artix.conf \
-g /boot/initramfs.img -g /boot/initramfs.img
if [[ -n "${GPG_KEY}" ]]; then if [[ -n "${GPG_KEY}" ]]; then
exec 17<&- exec {ARTIX_GNUPG_FD}<&-
unset ARTIX_GNUPG_FD
fi fi
if [[ -f /tmp/GPG_KEY ]]; then if [[ -f "${key_export}" ]]; then
rm /tmp/GPG_KEY rm "${key_export}"
fi fi
cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${arch}".img cp "$mnt"/boot/initramfs.img "${iso_root}"/boot/initramfs-"${arch}".img
prepare_boot_extras "$mnt" prepare_boot_extras "$mnt"
} }
configure_grub_mkinitcpio() {
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
}
#}}} #}}}

View File

@@ -5,80 +5,81 @@
show_profile(){ show_profile(){
msg2 "iso_file: %s" "${iso_file}" msg2 "iso_file: %s" "${iso_file}"
msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}" msg2 "AUTOLOGIN: %s" "${AUTOLOGIN}"
msg2 "HOST_NAME: %s" "${HOST_NAME}"
msg2 "USER_NAME: %s" "${USER_NAME}"
msg2 "PASSWORD: %s" "${PASSWORD}" msg2 "PASSWORD: %s" "${PASSWORD}"
msg2 "ADDGROUPS: %s" "${ADDGROUPS}"
msg2 "SERVICES_LIVE: %s" "${SERVICES_LIVE[*]}"
msg2 "SERVICES: %s" "${SERVICES[*]}" msg2 "SERVICES: %s" "${SERVICES[*]}"
} }
load_profile(){ load_profile(){
local profile_dir="${DATADIR}/iso-profiles" local profile_dir="${DATADIR}/iso-profiles"
[[ -d ${WORKSPACE_DIR}/iso-profiles ]] && profile_dir=${WORKSPACE_DIR}/iso-profiles [[ -d "${WORKSPACE_DIR}"/iso-profiles ]] && profile_dir="${WORKSPACE_DIR}"/iso-profiles
ROOT_LIST="$profile_dir/${profile}/Packages-Root" root_list="$profile_dir/${profile}/Packages-Root"
ROOT_OVERLAY="$profile_dir/${profile}/root-overlay" root_overlay="$profile_dir/${profile}/root-overlay"
[[ -f "$profile_dir/${profile}/Packages-Live" ]] && LIVE_LIST="$profile_dir/${profile}/Packages-Live" [[ -f "$profile_dir/${profile}/Packages-Live" ]] && live_list="$profile_dir/${profile}/Packages-Live"
[[ -d "$profile_dir/${profile}/live-overlay" ]] && LIVE_OVERLAY="$profile_dir/${profile}/live-overlay" [[ -d "$profile_dir/${profile}/live-overlay" ]] && live_overlay="$profile_dir/${profile}/live-overlay"
common_dir="${DATADIR}/iso-profiles/common"
[[ -d "$profile_dir"/common ]] && common_dir="${profile_dir}"/common
[[ -f $profile_dir/${profile}/profile.conf ]] || return 1 [[ -f $profile_dir/${profile}/profile.conf ]] || return 1
# shellcheck disable=1090 # shellcheck disable=1090
[[ -r "$profile_dir/${profile}"/profile.conf ]] && . "$profile_dir/${profile}"/profile.conf [[ -r "$profile_dir/${profile}"/profile.conf ]] && . "$profile_dir/${profile}"/profile.conf
DISPLAYMANAGER=${DISPLAYMANAGER:-'none'} AUTOLOGIN=${AUTOLOGIN:-true}
AUTOLOGIN=${AUTOLOGIN:-"true"}
[[ ${DISPLAYMANAGER} == 'none' ]] && AUTOLOGIN="false"
HOST_NAME=${HOST_NAME:-'artix'}
USER_NAME=${USER_NAME:-'artix'}
PASSWORD=${PASSWORD:-'artix'} PASSWORD=${PASSWORD:-'artix'}
ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"}
if [[ -z "${SERVICES[*]}" ]];then if [[ -z "${SERVICES[*]}" ]];then
SERVICES=('acpid' 'bluetoothd' 'cronie' 'cupsd' 'syslog-ng' 'connmand') SERVICES=('acpid' 'bluetoothd' 'cronie' 'cupsd' 'syslog-ng' 'connmand')
fi fi
if [[ ${DISPLAYMANAGER} != "none" ]];then
case "${INITSYS}" in
'openrc') SERVICES+=('xdm') ;;
'runit'|'s6') SERVICES+=("${DISPLAYMANAGER}") ;;
esac
fi
SERVICES_LIVE=('artix-live' 'pacman-init')
return 0 return 0
} }
load_pkgs(){ read_from_list() {
local pkglist="$1" init="$2" local list="$1"
msg2 "Loading Packages: [%s] ..." "${pkglist##*/}" local _space="s| ||g"
local _clean=':a;N;$!ba;s/\n/ /g'
local _com_rm="s|#.*||g"
local _init="s|@$init||g" _init_rm1 _init_rm2 local _init="s|@initsys@|${INITSYS}|g"
case "$init" in
'openrc') _init_rm1="s|@runit.*||g"; _init_rm2="s|@s6.*||g" ;;
's6') _init_rm1="s|@runit.*||g"; _init_rm2="s|@openrc.*||g" ;;
'runit') _init_rm1="s|@s6.*||g"; _init_rm2="s|@openrc.*||g" ;;
esac
local _space="s| ||g" \ msg2 "Loading Packages: [%s] ..." "${list##*/}"
_clean=':a;N;$!ba;s/\n/ /g' \ packages+=($(sed "$_com_rm" "$list" \
_com_rm="s|#.*||g"
packages=($(sed "$_com_rm" "$pkglist" \
| sed "$_space" \ | sed "$_space" \
| sed "$_purge" \
| sed "$_init" \ | sed "$_init" \
| sed "$_init_rm1" \
| sed "$_init_rm2" \
| sed "$_clean")) | sed "$_clean"))
} }
read_from_services() {
for svc in "${SERVICES[@]}"; do
case "$svc" in
sddm|gdm|lightdm|mdm|greetd|lxdm|xdm) packages+=("$svc-${INITSYS}") ;;
NetworkManager) packages+=("networkmanager-${INITSYS}") ;;
connmand) packages+=("connman-${INITSYS}") ;;
cupsd) packages+=("cups-${INITSYS}") ;;
bluetoothd) packages+=("bluez-${INITSYS}") ;;
syslog-ng|metalog) packages+=("$svc-${INITSYS}") ;;
esac
done
}
load_pkgs(){
local pkglist="$1"
packages=()
if [[ "${pkglist##*/}" == "Packages-Root" ]]; then
read_from_list "${common_dir}/Packages-base"
read_from_list "${common_dir}/Packages-apps"
read_from_list "${common_dir}/Packages-${INITSYS}"
[[ -n "${live_list}" ]] && read_from_list "${common_dir}/Packages-xorg"
read_from_list "$pkglist"
read_from_services
else
read_from_list "$pkglist"
fi
}
#}}} #}}}

View File

@@ -2,19 +2,11 @@
#{{{ services #{{{ services
set_xdm(){
if [[ -f "$1"/etc/conf.d/xdm ]];then
local conf='DISPLAYMANAGER="'${DISPLAYMANAGER}'"'
sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" "$1"/etc/conf.d/xdm
fi
}
add_svc_openrc(){ add_svc_openrc(){
local mnt="$1" names="$2" rlvl="${3:-default}" local mnt="$1" names="$2" rlvl="${3:-default}"
for svc in $names; do for svc in $names; do
if [[ -f $mnt/etc/init.d/$svc ]];then if [[ -f $mnt/etc/init.d/$svc ]];then
msg2 "Setting [%s]: %s" "${INITSYS}" "$svc" msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
[[ $svc == "xdm" ]] && set_xdm "$mnt"
chroot "$mnt" rc-update add "$svc" "$rlvl" &>/dev/null chroot "$mnt" rc-update add "$svc" "$rlvl" &>/dev/null
fi fi
done done
@@ -24,7 +16,7 @@ add_svc_runit(){
local mnt="$1" names="$2" rlvl="${3:-default}" local mnt="$1" names="$2" rlvl="${3:-default}"
for svc in $names; do for svc in $names; do
if [[ -d $mnt/etc/runit/sv/$svc ]]; then if [[ -d $mnt/etc/runit/sv/$svc ]]; then
msg2 "Setting [%s]: %s" "${INITSYS}" "$svc" msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
chroot "$mnt" ln -s /etc/runit/sv/"$svc" /etc/runit/runsvdir/"$rlvl" &>/dev/null chroot "$mnt" ln -s /etc/runit/sv/"$svc" /etc/runit/runsvdir/"$rlvl" &>/dev/null
fi fi
done done
@@ -32,21 +24,43 @@ add_svc_runit(){
add_svc_s6(){ add_svc_s6(){
local mnt="$1" names="$2" rlvl="${3:-default}" error ret local mnt="$1" names="$2" rlvl="${3:-default}" error ret
local db=/etc/s6/rc/compiled
for svc in $names; do for svc in $names; do
error=false error=false
chroot "$mnt" s6-rc-db -c /etc/s6/rc/compiled type "$svc" &> /dev/null || error=true chroot "$mnt" s6-rc-db -c "$db" type "$svc" &> /dev/null || error=true
ret="$?" ret="$?"
if [ $ret -eq 0 ] && [[ "$error" == false ]]; then if [ $ret -eq 0 ] && [[ "$error" == false ]]; then
msg2 "Setting [%s]: %s" "${INITSYS}" "$svc" msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
chroot "$mnt" s6-rc-bundle-update -c /etc/s6/rc/compiled add "$rlvl" "$svc" chroot "$mnt" s6-rc-bundle-update -c "$db" add "$rlvl" "$svc"
fi fi
done done
local rlvl=/etc/s6/current
# rebuild s6-linux-init binaries # rebuild s6-linux-init binaries
chroot "$mnt" rm -r /etc/s6/current chroot "$mnt" rm -r "$rlvl"
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" s6-linux-init-maker -1 -N -f /etc/s6/skel -G "/usr/bin/agetty -L -8 tty7 115200" -c "$rlvl" "$rlvl"
chroot "$mnt" mv /etc/s6/current/bin/init /etc/s6/current/bin/s6-init chroot "$mnt" mv "$rlvl"/bin/init "$rlvl"/bin/s6-init
chroot "$mnt" cp -a /etc/s6/current/bin /usr chroot "$mnt" cp -a "$rlvl"/bin /usr
}
add_svc_suite66(){
local mnt="$1" names="$2"
for svc in $names; do
if [[ -f "$mnt"/etc/66/service/"$svc" ]]; then
msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
chroot "$mnt" 66-enable -t default "$svc" &>/dev/null
fi
done
}
add_svc_dinit(){
local mnt="$1" names="$2"
for svc in $names; do
if [[ -d $mnt/etc/dinit.d/boot.d ]]; then
msg2 "Setting %s: [%s]" "${INITSYS}" "$svc"
chroot "$mnt" ln -s ../"$svc" /etc/dinit.d/boot.d/"$svc" &>/dev/null
fi
done
} }
#}}} #}}}

View File

@@ -2,24 +2,6 @@
#{{{ squash #{{{ squash
make_sig () {
local file="$1"
msg2 "Creating signature file..."
cd "${iso_root}${live_dir}"
chown "${owner}:$(id --group "${owner}")" "${iso_root}${live_dir}"
su "${owner}" -c "gpg --detach-sign --default-key ${GPG_KEY} $file"
chown -R root "${iso_root}${live_dir}"
cd "${OLDPWD}"
}
make_checksum(){
local file="$1"
msg2 "Creating md5sum ..."
cd "${iso_root}${live_dir}"
md5sum "$file" > "$file".md5
cd "${OLDPWD}"
}
make_ext_img(){ make_ext_img(){
local src="$1" local src="$1"
local size=32G local size=32G
@@ -85,14 +67,14 @@ make_sfs() {
mksfs_args+=("${sfs_out}") mksfs_args+=("${sfs_out}")
mksfs_args+=(-comp xz -b 256K -Xbcj x86 -noappend) mksfs_args+=(-comp "${COMPRESSION}" "${COMPRESSION_ARGS[@]}" -noappend)
mksquashfs "${mksfs_args[@]}" mksquashfs "${mksfs_args[@]}"
if ! ${use_dracut}; then if ! ${use_dracut}; then
make_checksum "${img_name}" make_checksum "${img_name}"
if [[ -n ${GPG_KEY} ]];then if [[ -n ${GPG_KEY} ]];then
make_sig "${img_name}" make_sig "${iso_root}${live_dir}/${img_name}"
fi fi
fi fi
if ${persist}; then if ${persist}; then

36
lib/pkg/common.sh Normal file
View File

@@ -0,0 +1,36 @@
#!/hint/bash
#{{{ common functions
get_compliant_name(){
local gitname="$1"
case "$gitname" in
*+) gitname=${gitname//+/plus}
esac
echo "$gitname"
}
get_pkg_org(){
local pkg="$1" org sub
case ${pkg} in
ruby-*) org="packagesRuby" ;;
perl-*) org="packagesPerl" ;;
python-*|python2-*) org="packagesPython" ;;
*) sub=${pkg:0:1}; org="packages${sub^^}" ;;
esac
echo "$org"
}
api_put() {
curl -s -X PUT "$@"
}
api_delete() {
curl -s -X DELETE "$@"
}
api_post() {
curl -s -X POST "$@"
}
#}}}

View File

@@ -2,59 +2,6 @@
#{{{ git #{{{ git
get_compliant_name(){
local gitname="$1"
case "$gitname" in
*+) gitname=${gitname//+/plus}
esac
echo "$gitname"
}
get_pkg_org(){
local pkg="$1" org sub
case ${pkg} in
ruby-*) org="packagesRuby" ;;
perl-*) org="packagesPerl" ;;
python-*|python2-*) org="packagesPython" ;;
*) sub=${pkg:0:1}; org="packages${sub^^}" ;;
esac
echo "$org"
}
get_team_id() {
local org="$1" team="$2"
local id
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')
echo "$id"
}
add_repo_to_team() {
local pkg="$1" org="$2" team="$3"
local id
id=$(get_team_id "$org" "$team")
local gitname
gitname=$(get_compliant_name "$pkg")
msg2 "Adding package repo [%s] to team (%s)" "$gitname" "$team"
curl -s -X PUT "${GIT_URL}/api/v1/teams/$id/repos/$org/$gitname?access_token=${GIT_TOKEN}" \
-H "accept: application/json"
}
remove_repo_from_team() {
local pkg="$1" org="$2" team="$3"
local id
id=$(get_team_id "$org" "$team")
local gitname
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"
}
get_local_head(){ get_local_head(){
git log --pretty=%H ...refs/heads/master^ | head -n 1 git log --pretty=%H ...refs/heads/master^ | head -n 1
} }

31
lib/pkg/gitea.sh Normal file
View File

@@ -0,0 +1,31 @@
#!/hint/bash
#{{{ gitea api
add_team_to_repo() {
local name="$1"
local org="$2"
local team="$3"
local url
url="${GIT_URL}/api/v1/repos/$org/$name/teams/$team?access_token=${GIT_TOKEN}"
msg2 "Adding team (%s) to package repo [%s]" "$team" "$name"
api_put "$url" -H "accept: application/json"
}
remove_team_from_repo() {
local name="$1"
local org="$2"
local team="$3"
local url
url="${GIT_URL}/api/v1/repos/$org/$name/teams/$team?access_token=${GIT_TOKEN}"
msg2 "Removing team (%s) from package repo [%s]" "$team" "$name"
api_delete "$url" -H "accept: application/json"
}
#}}}

View File

@@ -41,7 +41,7 @@ find_pkg(){
tree_loop(){ tree_loop(){
local func="$1" pkgs local func="$1" pkgs
for tree in "${ARTIX_TREE[@]}"; do for tree in "${ARTIX_TREE[@]}"; do
pkgs=$(find "${TREE_DIR_ARTIX}/$tree" -name repos -o -name "$CARCH") pkgs=$(find "${TREE_DIR_ARTIX}/$tree" -name "$CARCH" | sort)
for _package in ${pkgs}; do for _package in ${pkgs}; do
"$func" "$_package" "$func" "$_package"
done done

View File

@@ -5,32 +5,31 @@
msg_table_header(){ msg_table_header(){
local mesg=$1; shift local mesg=$1; shift
# shellcheck disable=2059 # shellcheck disable=2059
printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@" >&2 printf "${BLUE} ${mesg} ${ALL_OFF}\n" "$@"
} }
msg_row_downgrade(){ msg_row_yellow(){
local mesg=$1; shift local mesg=$1; shift
# shellcheck disable=2059 # shellcheck disable=2059
printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@" >&2 printf "${YELLOW} ${mesg}${ALL_OFF}\n" "$@"
} }
msg_row_notify(){ msg_row_green(){
local mesg=$1; shift local mesg=$1; shift
# shellcheck disable=2059 # shellcheck disable=2059
printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@" >&2 printf "${GREEN} ${mesg}${ALL_OFF}\n" "$@"
} }
msg_row(){ msg_row(){
local mesg=$1; shift local mesg=$1; shift
# printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
# shellcheck disable=2059 # shellcheck disable=2059
printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@" >&2 printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@"
} }
msg_row_upgrade(){ msg_row_red(){
local mesg=$1; shift local mesg=$1; shift
# shellcheck disable=2059 # shellcheck disable=2059
printf "${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2 printf "${RED} ${mesg} ${ALL_OFF}\n" "$@"
} }
#}}} #}}}

View File

@@ -19,6 +19,18 @@ load_iso_config(){
GPG_KEY=${GPG_KEY:-''} GPG_KEY=${GPG_KEY:-''}
COMPRESSION="${COMPRESSION:-zstd}"
COMPRESSION_LEVEL="${COMPRESSION_LEVEL:-15}"
if [[ -z "${COMPRESSION_ARGS[*]}" ]]; then
COMPRESSION_ARGS=(-Xcompression-level "${COMPRESSION_LEVEL}")
fi
if [[ "${COMPRESSION}" == 'xz' ]]; then
COMPRESSION_ARGS=(-Xbcj x86)
fi
return 0 return 0
} }

View File

@@ -23,19 +23,19 @@ load_pkg_config(){
ARTIX_TREE=( ARTIX_TREE=(
packages community packages community
packages-{gfx,gtk,media,net,qt5,xorg} packages-{gfx,media,net}
) )
local dev_tree=( local dev_tree=(
packages-{python,perl,java,ruby} packages-{llvm,python,perl,java,ruby,misc}
python-{world,galaxy} python-{world,galaxy,galaxy-groups,misc}
) )
local init_tree=(packages-{openrc,runit,s6}) local init_tree=(packages-{openrc,runit,s6,suite66,dinit})
local desktop_tree=( local desktop_tree=(
packages-{kf5,plasma,kde,qt6} packages-{kf5,plasma,kde,qt5,qt6,xorg,gtk}
packages-{lxqt,gnome,cinnamon,mate,xfce,wm} packages-{lxqt,gnome,cinnamon,mate,xfce,wm,lxde}
) )
[[ -z ${TREE_NAMES_ARTIX[*]} ]] && \ [[ -z ${TREE_NAMES_ARTIX[*]} ]] && \
@@ -61,7 +61,7 @@ load_pkg_config(){
HOST_TREE_ARCH=${HOST_TREE_ARCH:-'https://github.com/archlinux'} HOST_TREE_ARCH=${HOST_TREE_ARCH:-'https://github.com/archlinux'}
DBEXT=${DBEXT:-'xz'} DBEXT=${DBEXT:-'gz'}
return 0 return 0
} }