Compare commits

...

34 Commits
0.16 ... 0.17.3

Author SHA1 Message Date
4089151791 buildtree: fix team assignment for *testing & *staging 2020-02-25 10:19:51 +01:00
211579f9d7 lib/gitea: remove admin 2020-02-24 00:11:18 +01:00
2a85209e1e buildtree: fix patching 2020-02-21 15:54:49 +01:00
40d691bc85 redo arch repos 2020-02-19 23:12:37 +01:00
d9da64eb51 buildtree: use jq to parse json (#26)
buildtree: fix team for new repos

doouble quote some vars

add git.sh lib

fixes

comparepkg: clean up ugly code

house cleaning

comparepkg: slightly improve performance

fix typo

revert to cloning a new pkg repo

test subrepo init

let buildtree assign team to new repo

commitpkg: check team pkgs

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

commitpkg: fix cross check

commitpkg: run team change check last

commitpkg: rm empty func

commitpkg: change team on cross repo move

buildtree: use jq to parse json
2020-02-16 11:34:58 +01:00
5902f987cc Merge branch 's6-typo-fix' of artix/artools into master 2020-01-26 00:32:46 +01:00
bfa888251e s6: fix a typo 2020-01-24 20:47:58 -06:00
0ecfa1a0f6 Merge branch 's6-fixes' of artix/artools into master 2020-01-24 18:47:07 +01:00
e60180ebdb s6: manually rebuild s6-linux-init binaries
Since the s6-linux-init package is more generic now and has no special
compile options, the binaries need to be rebuilt while making the
liveiso so it works correctly.
2020-01-24 10:59:07 -06:00
20b65d06c8 pkg: use zst 2020-01-11 02:59:10 +01:00
c7728c2e5b start 0.17 2020-01-11 02:58:40 +01:00
a0ca1ab3a4 update makepkg.conf 2020-01-10 23:03:18 +01:00
911a0fff36 buildiso: fix grub theme paths 2019-12-15 23:30:31 +01:00
f80c51e8d3 buildiso: fix umount on error 2019-12-15 23:00:17 +01:00
1e948b3ef5 buildiso: fix cal unpackfs path 2019-12-14 23:14:47 +01:00
bf0a9bc7fc don't create dirs in load_config 2019-12-13 22:50:58 +01:00
a4a690951c set extglob 2019-12-13 21:06:22 +01:00
e05765269e buildiso: fix msg 2019-12-13 18:59:50 +01:00
3df364189b mkchrootpkg: apply arch patch 2019-12-13 18:59:27 +01:00
974df38738 iso (#23) 2019-12-13 18:06:47 +01:00
7b831d8867 arch patches (#22) 2019-12-13 17:51:20 +01:00
7bf4dff1a1 buildiso: add grub kopt msg 2019-11-27 09:55:35 +01:00
529e73e2ab buildiso: add dracut support 2019-11-19 21:41:49 +01:00
7be420a24f buildiso: set proper device label for rw 2019-11-19 14:55:31 +01:00
cd76f7d3cf buildiso: use md5 for img sums 2019-11-19 01:10:58 +01:00
918b95db58 initcpio: fix pxe 2019-11-19 01:10:17 +01:00
77c464d603 initcpio (#21) 2019-11-18 21:06:16 +01:00
55945b8975 refact (#20) 2019-11-17 21:59:25 +01:00
f83cc2a4a8 lib & var cleaning 2019-11-12 10:19:28 +01:00
6d5dbc5774 data: sync with pacman 5.2.0-2 2019-11-09 00:58:27 +01:00
36ee26e18c use libmakepkg load_makepkg_config() 2019-11-09 00:19:24 +01:00
0b9e18ed5b use libmakepkg load_makepkg_config() 2019-11-09 00:15:18 +01:00
b26b6da61c chroot-run: remove obsolete mount calls 2019-11-09 00:14:42 +01:00
e1f762cd91 mkchrootpkg $ chroot-run: add arch patches, simplify bindmounts 2019-11-08 20:49:36 +01:00
48 changed files with 1250 additions and 946 deletions

View File

@@ -1,4 +1,4 @@
VERSION=0.16
VERSION=0.17
CHROOT_VERSION=0.10
@@ -27,7 +27,7 @@ BASE_LIBS = \
BASE_UTIL = lib/util-base.sh
BASE_DATA = \
$(wildcard data/base/pacman*.conf)
$(wildcard data/pacman/pacman*.conf)
PKG_CONF = \
data/conf/artools-pkg.conf
@@ -90,12 +90,12 @@ LN_DEPLOYPKG = \
deploypkg-gnome-wobble
PKG_LIBS = \
$(wildcard lib/pkg/*)
$(wildcard lib/pkg/*.sh)
PKG_UTIL = lib/util-pkg.sh
PKG_DATA = \
data/pkg/makepkg.conf
data/pacman/makepkg.conf
PATCHES = \
$(wildcard data/patches/*.patch)
@@ -116,8 +116,6 @@ ISO_LIBS = \
ISO_UTIL = lib/util-iso.sh
ISO_DATA = \
data/iso/mkinitcpio.conf
DIRMODE = -dm0755
FILEMODE = -m0644
@@ -211,9 +209,6 @@ install_iso: install_cpio
install $(FILEMODE) $(ISO_UTIL) $(DESTDIR)$(LIBDIR)/$(TOOLS)
install $(FILEMODE) $(ISO_LIBS) $(DESTDIR)$(LIBDIR)/$(TOOLS)/iso
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)
install $(FILEMODE) $(ISO_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS)
install: install_base install_pkg install_iso
.PHONY: all clean install install_base install_pkg install_iso

View File

@@ -28,7 +28,7 @@ artools
- pkg:
* namcap
* git-subrepo
* jshon
* jq
- iso:
* dosfstools

View File

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

View File

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

View File

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

View File

@@ -14,10 +14,7 @@
. @libdir@/artools/util-base.sh
load_user_info
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
load_makepkg_config
file_to_sign="$1"

View File

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

View File

@@ -14,6 +14,8 @@
. @libdir@/artools/util-iso.sh
prepare_artools
connect(){
echo "${ACCOUNT}@${FILE_HOST}:${FILE_HOME}"
}

View File

@@ -14,6 +14,8 @@
. /usr/lib/artools/util-pkg.sh
prepare_artools
batch_move() {
local name="${1:-pkg_moves}"
local pkglist=${TREE_DIR_ARTIX}/$name.list

View File

@@ -14,6 +14,8 @@
. @libdir@/artools/util-pkg.sh
prepare_artools
create_first=false
rebuild=false
no_check=false
@@ -90,7 +92,7 @@ if ${create_first} || [[ ! -d "${CHROOTS_PKG}/${repo}-${ARCH}" ]];then
lock_close 9
rm -rf --one-file-system "${CHROOTS_PKG}/${repo}-${ARCH}"
mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}"
(umask 0022; mkdir -p "${CHROOTS_PKG}/${repo}-${ARCH}")
setarch "${ARCH}" mkchroot \
-C "${pacman_conf}" \
-M "${makepkg_conf}" \

View File

@@ -14,33 +14,41 @@
. @libdir@/artools/util-pkg.sh
prepare_artools
patch_pkg(){
local pkg="$1"
local pkgpath="$1"
local pkg=${pkgpath%/*}
pkg=${pkg##*/}
case $pkg in
glibc)
msg2 "Patching %s" "$pkg"
sed -e 's|{locale,systemd/system,tmpfiles.d}|{locale,tmpfiles.d}|' \
-e '/nscd.service/d' \
-i $pkg/trunk/PKGBUILD
-i $pkgpath/PKGBUILD
;;
linux|linux-lts)
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i $pkg/trunk/PKGBUILD
msg2 "Patching %s" "$pkg"
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i $pkgpath/PKGBUILD
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
-i $pkg/trunk/config
-i $pkgpath/config
;;
bash)
msg2 "Patching %s" "$pkg"
sed -e 's|system.bash_logout)|system.bash_logout artix.bashrc)|' \
-e "s|etc/bash.|etc/bash/|g" \
-e 's|"$pkgdir/etc/skel/.bash_logout"|"$pkgdir/etc/skel/.bash_logout"\n install -Dm644 artix.bashrc $pkgdir/etc/bash/bashrc.d/artix.bashrc|' \
-i $pkg/trunk/PKGBUILD
cd $pkg/trunk
-i $pkgpath/PKGBUILD
cd $pkgpath
patch -Np 1 -i ${DATADIR}/patches/artix-bash.patch
updpkgsums
cd ../..
;;
gstreamer|gst-plugins-*|licenses)
msg2 "Patching %s" "$pkg"
sed -e 's|https://www.archlinux.org/|https://www.artixlinux.org/|' \
-e 's|(Arch Linux)|(Artix Linux)|' \
-i $pkg/trunk/PKGBUILD
-i $pkgpath/PKGBUILD
;;
esac
}
@@ -82,7 +90,7 @@ sync_pkg(){
}
show_deps(){
local src="$1" repo="$2"
local src="$1"
. $src/PKGBUILD 2>/dev/null
@@ -90,7 +98,6 @@ show_deps(){
local archver=$(get_full_version)
msg2 "repo: %s" "$repo"
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
msg2 "pkgname: %s" "${pkgname[*]}"
[[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}"
@@ -109,6 +116,9 @@ subrepo_new(){
cd ${TREE_DIR_ARTIX}/$group
msg2 "team: %s" "$team"
msg2 "group: %s" "$group"
local org=$(get_pkg_org "${PACKAGE}")
create_repo "${PACKAGE}" "$org"
@@ -122,66 +132,73 @@ subrepo_new(){
commit_jenkins_files "${PACKAGE}"
}
from_arch(){
local src= dest=
get_team(){
local repo="$1" team=
case $repo in
*testing*|*staging*)
set_arch_repos false false false
team=$(find_repo "$srcpath")
team=${team%-*}
;;
*) team=${repo%-*} ;;
esac
echo $team
}
from_arch(){
cd ${TREE_DIR_ARTIX}
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local srcpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $srcpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local package=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE}
local repo=$(find_repo "$package" "${staging}" "${unstable}")
local repo=$(find_repo "$srcpath")
src=$package/repos/$repo
archpath=$srcpath/repos/$repo
local artixpath=$(find_pkg ${TREE_DIR_ARTIX} ${PACKAGE})
local tree=${srcpath%/*}
local tree=${tree##*/}
local group=$(get_group "${PACKAGE}" "$tree")
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
msg "repo: %s" "$repo"
artixpath=$artixpath/trunk
dest=${TREE_DIR_ARTIX}/$tree_dir/${PACKAGE}/trunk
show_deps "$archpath"
msg "tree: %s" "$tree_dir"
show_deps "$src" "$repo"
if [[ -f $artixpath/PKGBUILD ]];then
if [[ -d $dest ]];then
cd ${TREE_DIR_ARTIX}/$git_tree_artix
. $dest/PKGBUILD 2>/dev/null
. $artixpath/PKGBUILD 2>/dev/null
local artixver=$(get_full_version)
msg2 "Artix Version: %s" "$artixver"
else
subrepo_new "$tree_dir" "$git_tree_arch"
artixpath=${TREE_DIR_ARTIX}/$group/${PACKAGE}/trunk
subrepo_new "${group}" "$(get_team $repo)"
fi
msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir"
msg "Sync (%s) from Arch [%s] to Artix [%s]" "${PACKAGE}" "${archpath##*archlinux/}" "${artixpath##*artixlinux/}"
sync_pkg "$src" "$dest"
patch_pkg "${PACKAGE}"
sync_pkg "$archpath" "$artixpath"
patch_pkg "$artixpath"
}
view_build(){
local src=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE}
local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}")
src=$pkg_path/repos/$repo
show_deps "$src" "$repo"
local archpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $archpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local repo=$(find_repo "${archpath}")
archpath=$archpath/repos/$repo
msg2 "repo: %s" "$repo"
show_deps "$archpath"
}
check_tree(){
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
msg "tree_dir: %s" "$tree_dir"
[[ -z $git_tree_artix ]] && msg2 "exists: %s" "no"
[[ -n $git_tree_artix ]] && msg2 "exists: %s" "yes"
local archpath=$(find_pkg "${TREE_DIR_ARCH}" "${PACKAGE}")
[[ -z $archpath ]] && die "Package '%s' does not exist!" "${PACKAGE}"
local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" ${PACKAGE})
local group=${artixpath%/*}
msg "group: %s" "${group##*/}"
[[ -z $artixpath ]] && msg2 "exists: %s" "no"
[[ -n $artixpath ]] && msg2 "exists: %s" "yes"
}
sync_repos(){
@@ -195,8 +212,11 @@ sync_repos(){
fi
}
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
load_makepkg_config
testing=true
staging=true
unstable=false
sync=false
sync_arch=true
@@ -204,33 +224,32 @@ sync_artix=true
import=false
view=false
createnew=false
conf=false
unstable=false
staging=true
sync_group=false
check=false
PACKAGE=''
TEAM=${TREE_NAMES_ARTIX[0]}
TEAM='community'
GROUP=${TREE_NAMES_ARTIX[0]}
usage() {
echo "Usage: ${0##*/} [options]"
echo ' -p <pkg> Package name'
echo ' -t <team> Team name (only with -n)'
echo ' Possible values: core,extra,community,multilib'
echo " [default: ${TEAM}]"
echo ' -g <group> Group name, the superrepo (only with -n or -s)'
echo " [default: ${GROUP}]"
echo " -s Clone or pull repos"
echo " -z Don't clone or pull arch repos"
echo " -y Don't clone or pull artix repos"
echo " -a Don't clone or pull arch repos"
echo " -b Don't clone or pull artix repos"
echo ' -i Import a package from arch repos'
echo ' -n Make new remote subrepo and clone it'
echo ' -u Include kde & gnome unstable (only with -i)'
echo ' -w Exclude staging (only with -i)'
echo ' -v Check if a package is in the artix tree(s)'
echo ' -c View package depends'
echo ' -x Exclude testing (only with -i)'
echo ' -y Exclude staging (only with -i)'
echo ' -z Include kde & gnome unstable (only with -i)'
echo ' -h This help'
echo ''
echo ''
@@ -239,7 +258,7 @@ usage() {
orig_argv=("$0" "$@")
opts='p:t:g:uwsinzycvh'
opts='p:t:g:sinabcvxyzh'
while getopts "${opts}" arg; do
case "${arg}" in
@@ -247,14 +266,15 @@ while getopts "${opts}" arg; do
t) TEAM="$OPTARG" ;;
g) GROUP="$OPTARG"; sync_group=true ;;
s) sync=true ;;
z) sync_arch=false ;;
y) sync_artix=false ;;
a) sync_arch=false ;;
b) sync_artix=false ;;
i) import=true ;;
n) createnew=true ;;
w) staging=false ;;
u) unstable=true ;;
c) check=true ;;
v) view=true ;;
x) testing=false ;;
y) staging=false ;;
z) unstable=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
@@ -265,6 +285,8 @@ shift $(($OPTIND - 1))
prepare_dir "${TREE_DIR_ARTIX}"
prepare_dir "${TREE_DIR_ARCH}"
set_arch_repos "$testing" "$staging" "$unstable"
${sync} && sync_repos
${view} && view_build

View File

@@ -16,22 +16,7 @@
shopt -s extglob
# Source makepkg.conf; fail if it is not found
if [[ -r '/etc/makepkg.conf' ]]; then
# shellcheck source=makepkg-x86_64.conf
source '/etc/makepkg.conf'
else
die '/etc/makepkg.conf not found!'
fi
# Source user-specific makepkg.conf overrides
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf"
elif [[ -r "$HOME/.makepkg.conf" ]]; then
# shellcheck source=/dev/null
source "$HOME/.makepkg.conf"
fi
load_makepkg_config
usage() {
cat <<- _EOF_

View File

@@ -14,6 +14,8 @@
. @libdir@/artools/util-pkg.sh
prepare_artools
get_path(){
local repo="$1" pkg=trunk/PKGBUILD
if [[ $repo != trunk ]]; then
@@ -30,15 +32,30 @@ prepare_commit(){
[[ ! -d repos/$dest ]] && mkdir repos/$dest
}
commit_pkg(){
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${git_tree} ]];then
check_team(){
if [[ ${REPO_SRC} == "core" && ${REPO_DEST} == "extra" ]] || \
[[ ${REPO_SRC} == "extra" && ${REPO_DEST} == "core" ]] || \
[[ ${REPO_SRC} == "extra" && ${REPO_DEST} == "community" ]] || \
[[ ${REPO_SRC} == "community" && ${REPO_DEST} == "extra" ]] ;then
cd ${TREE_DIR_ARTIX}/${git_tree}
local org=$(get_pkg_org "${PACKAGE}")
add_repo_to_team "${PACKAGE}" "$org" "${REPO_DEST}"
remove_repo_from_team "${PACKAGE}" "$org" "${REPO_SRC}"
fi
}
commit_pkg(){
local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${artixpath} ]];then
local group=${artixpath%/*}
cd ${group}
local head=$(get_local_head)
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
cd ${artixpath}
local pkgbuild=$(get_path "${REPO_SRC}")
@@ -65,19 +82,18 @@ commit_pkg(){
commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}"
msg "Action: %s" "$commit_msg"
git add .
fi
git commit -m "$commit_msg"
cd ${TREE_DIR_ARTIX}/${git_tree}
cd ${group}
${push} && pull_tree "${git_tree}" "$head"
${push} && pull_tree "${group##*/}" "$head"
# subrepo_pull "${PACKAGE}"
subrepo_push "${PACKAGE}"
subrepo_clean "${PACKAGE}"
${push} && push_tree "${git_tree}"
${push} && push_tree "${group##*/}"
git prune
else
@@ -85,15 +101,17 @@ commit_pkg(){
fi
}
symlink_commit_pkg(){
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${git_tree} ]];then
repo_commit_pkg(){
local artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${artixpath} ]];then
cd ${TREE_DIR_ARTIX}/${git_tree}
local group=${artixpath%/*}
cd ${group}
local head=$(get_local_head)
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
cd ${artixpath}
local pkgbuild=$(get_path "${REPO_SRC}")
@@ -125,24 +143,37 @@ symlink_commit_pkg(){
git add .
git commit -m "$commit_msg"
cd ${TREE_DIR_ARTIX}/${git_tree}
cd ${group}
${push} && pull_tree "${git_tree}" "$head"
${push} && pull_tree "${group##*/}" "$head"
# subrepo_pull "${PACKAGE}"
subrepo_push "${PACKAGE}"
subrepo_clean "${PACKAGE}"
${push} && push_tree "${git_tree}"
${push} && push_tree "${group##*/}"
git prune
check_team
else
error "Package '%s' does not exist!" "${PACKAGE}"
fi
}
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
is_valid_repo(){
local src="$1" cases=
set_arch_repos true true true
for r in ${ARCH_REPOS[@]};do
cases=${cases:-}${cases:+|}${r}
done
eval "case $src in
${cases}|trunk) return 0 ;;
*) return 1 ;;
esac"
}
load_makepkg_config
REPO_SRC='trunk'
PACKAGE=''
@@ -185,7 +216,7 @@ if $(is_valid_repo "${REPO_SRC}");then
if [[ "${cmd}" == 'commitpkg' ]];then
commit_pkg
else
symlink_commit_pkg
repo_commit_pkg
fi
else
error "source repository '%s' is not valid!" "${REPO_SRC}"

View File

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

View File

@@ -14,12 +14,15 @@
. @libdir@/artools/util-pkg.sh
prepare_artools
find_cached_pkgfile() {
local searchdirs=("$PKGDEST" "$PWD") results=()
local pkg="$1"
local search=${pkg%.*}
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
results+=$(find "$dir" -type f -name "$pkg")
results+=$(find "$dir" -type f -name "$search.*" ! -path '*.sig')
done
case ${#results[*]} in
0)
@@ -129,8 +132,7 @@ update_repo(){
return 0
}
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
load_makepkg_config
add_pkg=false
del_pkg=false

View File

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

View File

@@ -33,8 +33,7 @@ run_checkpkg=0
temp_chroot=0
run_nocheck=0
bindmounts_ro=()
bindmounts_rw=()
bindmounts=()
copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
@@ -147,8 +146,7 @@ install_packages() {
cp -- "${install_pkgs[@]}" "$copydir/root/"
chroot-run \
-r "${bindmounts_ro[@]}" \
-r "${bindmounts_rw[@]}" \
-b "${bindmounts[@]}" \
"$copydir" \
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
ret=$?
@@ -282,13 +280,12 @@ move_products() {
orig_argv=("$0" "$@")
opts='hcur:I:l:nNCTD:d:U:'
opts='hcur:I:l:nNCTb:U:'
while getopts "${opts}" arg; do
case "$arg" in
c) clean_first=1 ;;
D) bindmounts_ro+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
b) bindmounts+=("$OPTARG") ;;
u) update_first=1 ;;
r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;;
@@ -332,16 +329,12 @@ for arg in "${@:$OPTIND}"; do
esac
done
if [[ -n $SUDO_USER ]]; then
eval "USER_HOME=~$SUDO_USER"
else
USER_HOME=$HOME
fi
umask 0022
load_vars "${XDG_CONFIG_HOME}/pacman/makepkg.conf" || load_vars "${USER_HOME}/.makepkg.conf"
load_vars /etc/makepkg.conf
ORIG_HOME=$HOME
IFS=: read -r _ _ _ _ _ HOME _ < <(getent passwd "${SUDO_USER:-$USER}")
load_makepkg_config
HOME=$ORIG_HOME
# Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD
@@ -356,11 +349,10 @@ if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir" "$copydir" "$copy"
fi
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
bindmounts+=("-B:${PWD}:/startdir" "-B:${SRCDEST}:/srcdest")
(( update_first )) && chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
-b "${bindmounts[*]}" \
"$copydir" \
pacman -Syuu --noconfirm
@@ -381,8 +373,7 @@ download_sources
prepare_chroot
if chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
-b "${bindmounts[*]}" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
then
@@ -407,13 +398,27 @@ if (( ret != 0 )); then
else
if (( run_checkpkg )); then
msg "Running checkpkg"
msg2 "Downloading current versions"
if pacman --noconfirm -Swdd --logfile /dev/null "${pkgnames[@]}"; then
msg2 "Checking packages"
sudo -u "$makepkg_user" checkpkg --rmdir --warn
else
warning "Skipped checkpkg due to missing packages"
# sync off-site databases for up-to-date queries
trap 'rm -rf $dbpath; cleanup' EXIT INT TERM QUIT
dbpath=$(mktemp -d --tmpdir makechrootpkg-database.XXXXXXXXXX)
mkdir -p "$dbpath"
pacman -Sy --dbpath "$dbpath" --logfile /dev/null
# query current package locations
remotepkgs=($(pacman -Sddp --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"))
if (( $? )); then
warning "Skipped checkpkg due to missing repo packages"
exit 0
fi
# download package files if any non-local location exists
for remotepkg in "${remotepkgs[@]}"; do
[[ $remotepkg == file://* ]] && continue
msg2 "Downloading current versions"
pacman --noconfirm -Swdd --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"
break
done
msg2 "Checking packages"
sudo -u "$makepkg_user" checkpkg --rmdir --warn
fi
true
fi

View File

@@ -144,6 +144,6 @@ PACKAGE="$1"/PKGBUILD; shift
. "$PACKAGE"
. /etc/makepkg.conf
load_makepkg_config
write_pkg_yaml

View File

@@ -11,7 +11,7 @@
# possible values: openrc, runit, s6
# INITSYS="openrc"
# gpg key; leave empty or commented to skip sfs signing
# gpg key; leave empty or commented to skip img signing
# GPG_KEY=""
# set upload bandwidth limit in kB/s

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -25,18 +25,6 @@ show_elapsed_time(){
info "Time %s: %s minutes" "$1" "$(elapsed_time $2)"
}
load_vars() {
local var
[[ -f $1 ]] || return 1
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do
[[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")"
done
return 0
}
prepare_dir(){
[[ ! -d $1 ]] && mkdir -p $1
}

View File

@@ -42,6 +42,12 @@ add_svc_s6(){
fi
done
chroot $mnt s6-rc-bundle -c /etc/s6/rc/compiled add $rlvl $valid
# rebuild s6-linux-init binaries
chroot $mnt rm -r /etc/s6/current
chroot $mnt s6-linux-init-maker -1 -N -f /etc/s6/skel -G "/usr/bin/agetty -L -8 tty1 115200" -c /etc/s6/current /etc/s6/current
chroot $mnt mv /etc/s6/current/bin/init /etc/s6/current/bin/s6-init
chroot $mnt cp -a /etc/s6/current/bin /usr
}
set_xdm(){
@@ -139,6 +145,21 @@ write_postcfg(){
printf '%s' "${yaml}"
}
write_unpackfs() {
local yaml=$(write_yaml_header)
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(){
local mods="$1/etc/calamares/modules"
if [[ -d "$mods" ]];then
@@ -146,12 +167,13 @@ configure_calamares(){
write_users_conf > "$mods"/users.conf
write_services_"${INITSYS}"_conf "$mods"
write_postcfg > "$mods"/postcfg.conf
write_unpackfs > "$mods"/unpackfs.conf
sed -e "s|services-openrc|services-${INITSYS}|" \
-i "$1"/etc/calamares/settings.conf
fi
}
configure_image(){
configure_chroot(){
local fs="$1"
msg "Configuring [%s]" "${fs##*/}"
configure_hosts "$fs"
@@ -163,3 +185,40 @@ configure_image(){
write_live_session_conf > "$fs/etc/artools/live.conf"
msg "Done configuring [%s]" "${fs##*/}"
}
clean_up_chroot(){
local path mnt="$1"
msg2 "Cleaning [%s]" "${mnt##*/}"
path=$mnt/boot
if [[ -d "$path" ]]; then
find "$path" -name 'initramfs*.img' -delete &> /dev/null
fi
path=$mnt/var/lib/pacman/sync
if [[ -d $path ]];then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/cache/pacman/pkg
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/log
if [[ -d $path ]]; then
find "$path" -type f -delete &> /dev/null
fi
path=$mnt/var/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
path=$mnt/tmp
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
rm $mnt/boot/grub/grub.cfg
fi
if [[ -f "$mnt/etc/machine-id" ]]; then
rm $mnt/etc/machine-id
fi
}

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

@@ -12,6 +12,30 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
shopt -s extglob
declare -A REPOS=(
[core]=system
[extra]=world
[community]=galaxy
[multilib]=lib32
[testing]=gremlins
[staging]=goblins
[community-testing]=galaxy-gremlins
[community-staging]=galaxy-goblins
[multilib-testing]=lib32-gremlins
[multilib-staging]=lib32-goblins
[kde-unstable]=kde-wobble
[gnome-unstable]=gnome-wobble
)
ARCH_REPOS=(
core
extra
community
multilib
)
get_compliant_name(){
local gitname="$1"
case $gitname in
@@ -20,64 +44,7 @@ get_compliant_name(){
echo $gitname
}
arch2artix(){
local repo="$1" artix=none
case "$repo" in
core) artix=system ;;
extra) artix=world ;;
community) artix=galaxy ;;
multilib) artix=lib32 ;;
staging) artix=goblins ;;
testing) artix=gremlins ;;
community-staging) artix=galaxy-goblins ;;
community-testing) artix=galaxy-gremlins ;;
multilib-staging) artix=lib32-goblins ;;
multilib-testing) artix=lib32-gremlins ;;
kde-unstable) artix=kde-wobble ;;
gnome-unstable) artix=gnome-wobble ;;
esac
echo $artix
}
find_tree(){
local tree="$1" pkg="$2"
local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg")
result=${result%/*}
echo ${result##*/}
}
arch_repos(){
local stag="$1" unst="$2"
local repos=(core extra testing community community-testing multilib multilib-testing)
$stag && repos+=(staging community-staging multilib-staging)
$unst && repos+=(gnome-unstable kde-unstable)
echo ${repos[@]}
}
find_repo(){
local pkg="$1" stag="$2" unst="$3" repo=
for r in $(arch_repos "$stag" "$unst");do
[[ -f $pkg/repos/$r-${ARCH}/PKGBUILD ]] && repo=$r-${ARCH}
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any
done
echo $repo
}
is_valid_repo(){
local src="$1" cases=
for r in $(arch_repos true true);do
cases=${cases:-}${cases:+|}${r}
done
eval "case $src in
${cases}|trunk) return 0 ;;
*) return 1 ;;
esac"
}
get_cases(){
get_group_packages(){
local pkglist="${SYSCONFDIR}/pkglist.d/$1.list"
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
@@ -91,40 +58,55 @@ get_cases(){
echo $cases
}
get_artix_tree(){
local pkg="$1" artix_tree="${2:-$3}" tree
get_group(){
local pkg="$1" fallback="${2##*/}" tree=
eval "case $pkg in
$(get_cases kernel)) tree=packages-kernel ;;
$(get_cases python)) tree=packages-python ;;
$(get_cases perl)) tree=packages-perl ;;
$(get_cases ruby)) tree=packages-ruby ;;
$(get_cases openrc)) tree=packages-openrc ;;
$(get_cases runit)) tree=packages-runit ;;
$(get_cases s6)) tree=packages-s6 ;;
$(get_cases media)) tree=packages-media ;;
$(get_cases xorg)) tree=packages-xorg ;;
$(get_cases qt5)) tree=packages-qt5 ;;
$(get_cases gtk)) tree=packages-gtk ;;
$(get_cases java)) tree=packages-java ;;
$(get_cases haskell)) tree=packages-haskell ;;
$(get_cases devel)) tree=packages-devel ;;
$(get_cases lxqt)) tree=packages-lxqt ;;
$(get_cases cinnamon)) tree=packages-cinnamon ;;
$(get_cases kde)) tree=packages-kde ;;
$(get_cases gnome)) tree=packages-gnome ;;
$(get_cases mate)) tree=packages-mate ;;
$(get_cases xfce)) tree=packages-xfce ;;
*) tree=$artix_tree
$(get_group_packages kernel)) tree=packages-kernel ;;
$(get_group_packages python)) tree=packages-python ;;
$(get_group_packages perl)) tree=packages-perl ;;
$(get_group_packages ruby)) tree=packages-ruby ;;
$(get_group_packages openrc)) tree=packages-openrc ;;
$(get_group_packages runit)) tree=packages-runit ;;
$(get_group_packages s6)) tree=packages-s6 ;;
$(get_group_packages media)) tree=packages-media ;;
$(get_group_packages xorg)) tree=packages-xorg ;;
$(get_group_packages qt5)) tree=packages-qt5 ;;
$(get_group_packages gtk)) tree=packages-gtk ;;
$(get_group_packages java)) tree=packages-java ;;
$(get_group_packages haskell)) tree=packages-haskell ;;
$(get_group_packages devel)) tree=packages-devel ;;
$(get_group_packages lxqt)) tree=packages-lxqt ;;
$(get_group_packages cinnamon)) tree=packages-cinnamon ;;
$(get_group_packages kde)) tree=packages-kde ;;
$(get_group_packages gnome)) tree=packages-gnome ;;
$(get_group_packages mate)) tree=packages-mate ;;
$(get_group_packages xfce)) tree=packages-xfce ;;
*) tree=$fallback ;;
esac"
echo $tree
}
get_import_path(){
local pkg="$1" import_path=
for tree in ${TREE_NAMES_ARCH[@]};do
[[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg
set_arch_repos(){
local x="$1" y="$2" z="$3"
$x && ARCH_REPOS+=(testing community-testing multilib-testing)
$y && ARCH_REPOS+=(staging community-staging multilib-staging)
$z && ARCH_REPOS+=(gnome-unstable kde-unstable)
}
find_repo(){
local pkg="$1" repo=
for r in ${ARCH_REPOS[@]};do
[[ -f $pkg/repos/$r-${ARCH}/PKGBUILD ]] && repo=$r-${ARCH}
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any
done
echo $import_path
echo $repo
}
find_pkg(){
local searchdir="$1" pkg="$2"
local result=$(find $searchdir -mindepth 2 -maxdepth 2 -type d -name "$pkg")
echo $result
}
pkgver_equal() {
@@ -145,7 +127,7 @@ find_cached_package() {
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
for pkg in "$dir"/*.pkg.tar.?z; do
for pkg in "$dir"/*.pkg.tar?(.!(sig|*.*)); do
[[ -f $pkg ]] || continue
# avoid adding duplicates of the same inode
@@ -155,7 +137,7 @@ find_cached_package() {
# split apart package filename into parts
pkgbasename=${pkg##*/}
pkgbasename=${pkgbasename%.pkg.tar.?z}
pkgbasename=${pkgbasename%.pkg.tar*}
arch=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$arch"}

View File

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

View File

@@ -30,8 +30,6 @@ load_iso_config(){
ISO_POOL=${ISO_POOL:-"${WORKSPACE_DIR}/iso"}
prepare_dir "${ISO_POOL}"
PROFILE='base'
ISO_VERSION=${ISO_VERSION:-"$(date +%Y%m%d)"}

View File

@@ -43,6 +43,7 @@ load_pkg_config(){
packages-kernel
packages-openrc
packages-runit
packages-s6
packages-xorg
packages-python
packages-perl