Compare commits

...

58 Commits

Author SHA1 Message Date
231d054ee9 remove useless param in get_full_version() calls 2019-08-23 20:24:26 +02:00
2945493eb7 use var 2019-08-23 20:23:42 +02:00
0f037f1106 finddeps: colorize 2019-08-23 19:45:59 +02:00
6c4197e76d buildtree: enhance check mode 2019-08-22 16:42:38 +02:00
8ebdad278e buildtree: rm args in funcs 2019-08-22 14:18:37 +02:00
2bacf6d19e deploypkg: fix remove in file mode 2019-08-19 23:07:48 +02:00
6700e1a2e6 Merge branch 'deploy' of artix/artools into master 2019-08-19 14:57:15 +02:00
f874c8c399 buildpkg: add a rebuild option
deploypkg: add option to pass filenames
2019-08-18 21:47:27 +02:00
1a5ea6c4ee buildiso: rm log option; clean up 2019-08-12 22:20:21 +02:00
486acaf47a chroot-run: bind mount /etc/localtime if it exists 2019-08-12 18:41:58 +02:00
d5ba8ed404 buildiso: readd lock files 2019-08-12 11:11:04 +02:00
daf4c8283e buildiso: use basestrap instead of mkchroot 2019-08-12 11:00:13 +02:00
7b65c27025 mkchroot: remove locale backups 2019-08-12 10:59:43 +02:00
433a747da9 data: update artools 2019-08-12 00:31:31 +02:00
015c4f0658 buildiso: remove obsolete mount param 2019-08-12 00:07:23 +02:00
b1dd485ec0 initcpio: remove desktopfs from artix and pxe hook 2019-08-11 23:28:04 +02:00
316514698e buildiso: remove desktopfs support 2019-08-11 23:27:32 +02:00
614d6e19c8 mkchroot: rm left over arg 2019-08-11 23:00:13 +02:00
9c650134c4 buildiso: fix mkchroot_args 2019-08-11 22:17:10 +02:00
b849cadbae comparepkg: table adjustments 2019-08-11 22:00:13 +02:00
f1067bcd60 readd checkpkg, finddeps, find-libdeps 2019-08-11 20:14:04 +02:00
3942dde012 buildtree: support -sg <group> 2019-08-11 19:02:59 +02:00
30a6c61f52 arch-patches (#14) 2019-08-11 17:59:07 +02:00
d8195e2288 add media list 2019-08-10 15:29:00 +02:00
bfe9130cfb comparepkg: show group 2019-08-09 18:08:41 +02:00
8873a71824 subrepo.sh: clean up get_pkg_org() 2019-08-09 09:45:30 +02:00
bb86a05f2f support packages-devel 2019-08-08 22:42:55 +02:00
bd611c1af2 Merge branch 'artools-0.14' of artix/artools into master 2019-08-08 22:36:01 +02:00
f4e8f703ea load pkglist from /etc/artools/pkglist.d 2019-08-08 18:42:27 +02:00
aa83bc79bb rm pkglists 2019-08-08 18:15:15 +02:00
1bb9687ece add nemo packages to the cinnamon list 2019-08-01 10:44:45 -04:00
48ced03735 start 0.14 2019-07-31 21:15:22 +02:00
0437e66091 update artools.conf 2019-07-31 21:14:47 +02:00
9af6d02dea update pkglists; add more lists and make code dynamicly generate all cases 2019-07-31 19:13:07 +02:00
685992cca3 commitpkg: fix sourcing from input repo 2019-06-25 17:11:20 +02:00
816e13895f commitpkg: get proper version from repo folder instead of trunk 2019-06-24 16:59:27 +02:00
6a3f48f181 buildtree: readd switches to control arch import source 2019-06-17 19:06:59 +02:00
b4d9195c03 buildiso: don't error out if DESKTOP_LIST is not empty 2019-05-20 00:12:57 +02:00
0123e6d044 Merge branch 'serveriso' of artix/artools into master 2019-05-18 18:09:50 +02:00
e2b2a21ed1 buildiso: support extracting only rootfs with calamares 2019-05-17 23:46:52 +02:00
0e2e2875db merge sogrep functionality in comparepkg (#10) 2019-05-05 16:12:48 +02:00
a4d006adef base: fix typo in repo name 2019-04-30 00:57:46 +02:00
98926fbdd0 Merge branch 'artools-0.13' of artix/artools into master 2019-04-29 23:30:20 +02:00
a1a2289e18 sogrep: remove unused import 2019-04-29 19:01:06 +02:00
057cbf1691 prepare release 2019-04-29 14:48:25 +02:00
0b05cbeba1 deploypkg: rm links-add -n arg 2019-04-29 10:42:51 +02:00
ed5dad3066 sogrep: load artools.conf 2019-04-29 02:12:40 +02:00
76cce316a2 data: update artools.conf 2019-04-29 02:12:14 +02:00
7c152b4f60 deploypkg: add -l arg to use links db 2019-04-29 01:48:38 +02:00
79c831c616 links-add: make -n arg work 2019-04-29 01:35:48 +02:00
6b27c82b86 remove mklinksdb 2019-04-28 23:05:34 +02:00
2cc5047dda links-add: rm unused arg 2019-04-28 23:04:37 +02:00
08ab8c2137 links-add: fixes 2019-04-28 22:29:22 +02:00
9ddd962c2c add links-add & links-remove 2019-04-28 21:07:15 +02:00
a8c07bd7f3 make REPO_NAMES configurable 2019-04-28 21:06:54 +02:00
1fcf78bb47 start 0.13 2019-04-28 17:52:36 +02:00
167265944d add mklinksdb & sogrep 2019-04-28 17:46:37 +02:00
7ef931026e use proper args is_same_fs() 2019-04-28 15:24:45 +02:00
35 changed files with 1341 additions and 795 deletions

View File

@@ -1,6 +1,6 @@
VERSION=0.12
VERSION=0.14
CHROOT_VERSION=0.9
CHROOT_VERSION=0.10
TOOLS = artools
PREFIX ?= /usr
@@ -34,11 +34,12 @@ PKG_BIN = \
bin/pkg/deploypkg \
bin/pkg/commitpkg \
bin/pkg/comparepkg \
bin/pkg/checkpkg \
bin/pkg/mkchrootpkg \
bin/pkg/pkg2yaml \
bin/pkg/buildtree \
bin/pkg/lddd \
bin/pkg/links-add \
bin/pkg/checkpkg \
bin/pkg/finddeps \
bin/pkg/find-libdeps
@@ -87,9 +88,6 @@ LN_DEPLOYPKG = \
PKG_LIBS = \
$(wildcard lib/pkg/*)
PKG_LISTS = \
$(wildcard data/pkglists/*.list)
PKG_UTIL = lib/util-pkg.sh
PKG_DATA = \
@@ -171,6 +169,8 @@ install_pkg:
$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides
$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done
for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done
@@ -185,8 +185,6 @@ install_pkg:
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
install_cpio:
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install

View File

@@ -36,18 +36,16 @@ copy_keyring(){
create_min_fs(){
msg "Creating install root at %s" "$1"
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc}
mkdir -m 1777 -p $1/{tmp,run}
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,run,etc/pacman.d}
mkdir -m 1777 -p $1/tmp
mkdir -m 0555 -p $1/{sys,proc}
}
newroot=/mnt
hostcache=false
copykeyring=true
copymirrorlist=true
directory=false
interactive=false
hostcache=0
copykeyring=1
copymirrorlist=1
usage() {
echo "usage: ${0##*/} [options] root [packages...]"
@@ -72,10 +70,10 @@ opts=':C:cGiM'
while getopts ${opts} arg; do
case "${arg}" in
C) pacman_conf=$OPTARG ;;
c) hostcache=true ;;
i) interactive=true ;;
G) copykeyring=false ;;
M) copymirrorlist=false ;;
c) hostcache=1 ;;
i) interactive=1 ;;
G) copykeyring=0 ;;
M) copymirrorlist=0 ;;
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
?) usage 0 ;;
esac
@@ -88,9 +86,13 @@ check_root
newroot=$1; shift
pacman_args=("${@:-base}")
${hostcache} || pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg")
if (( ! hostcache ));then
pacman_args+=(--cachedir="$newroot/var/cache/pacman/pkg")
fi
${interactive} || pacman_args+=(--noconfirm)
if (( ! interactive )); then
pacman_args+=(--noconfirm)
fi
[[ -n $pacman_conf ]] && pacman_args+=(--config="$pacman_conf")
@@ -102,15 +104,16 @@ create_min_fs "$newroot"
# mount API filesystems
chroot_api_mount "$newroot" || die "failed to setup API filesystems in new root"
if (( copykeyring ));then
copy_keyring "$newroot"
fi
msg2 'Installing packages to %s' "$newroot"
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
die 'Failed to install packages to new root'
fi
if ${copykeyring};then
copy_keyring "$newroot"
fi
if ${copymirrorlist};then
if (( copymirrorlist ));then
copy_mirrorlist "$newroot"
fi

View File

@@ -16,9 +16,12 @@ chroot_version=0.9
. @libdir@/artools/util-base.sh
# umask might have been changed in /etc/profile
# ensure that sane default is set again
umask 0022
working_dir=''
files=()
nosetarch=false
usage() {
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
@@ -45,9 +48,9 @@ while getopts ${opts} arg; do
case "${arg}" in
C) pacman_conf="$OPTARG" ;;
M) makepkg_conf="$OPTARG" ;;
c) cache_dir="$OPTARG" ;;
c) cache_dirs+=("$OPTARG") ;;
f) files+=("$OPTARG") ;;
s) nosetarch=true ;;
s) nosetarch=1 ;;
r) bindmounts_ro=("$OPTARG") ;;
w) bindmounts_rw=("$OPTARG") ;;
h|?) usage ;;
@@ -65,20 +68,33 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.'
if [[ -z $cache_dir ]]; then
cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
else
cache_dirs=("$cache_dir")
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
fi
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#'))
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
done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
copy_hostconf () {
cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d"
unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ --no-permission-warning --quiet --batch --import --import-options import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
pacman-key --gpgdir "$working_dir"/etc/pacman.d/gnupg/ --import-trustdb "$(pacman-conf GpgDir)" >/dev/null 2>&1
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
@@ -95,8 +111,11 @@ copy_hostconf () {
chroot_extra_mount() {
chroot_add_resolv_conf "$1"
chroot_mount "/etc/hosts" "$1/etc/hosts" -B
# chroot_mount_conditional "[[ -e $1/etc/machine-id ]]" "/etc/machine-id" "$1/etc/machine-id" -B
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
if [[ -e /etc/localtime ]];then
[[ -e $1/etc/localtime ]] || touch $1/etc/localtime
chroot_mount "/etc/localtime" "$1/etc/localtime" -B
fi
for cache_dir in ${cache_dirs[@]:1}; do
chroot_mount "$cache_dir" "$1${cache_dir}" -Br
@@ -109,7 +128,7 @@ chroot_extra_mount() {
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')
@@ -135,7 +154,7 @@ copy_hostconf "${working_dir}"
eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")
${nosetarch} && unset CARCH
[[ -z $nosetarch ]] || unset CARCH
${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@"

View File

@@ -215,7 +215,7 @@ done
[[ $device = *'\040(deleted)' ]] && continue
if [[ $type = file ]]; then
printf '%-20s' "$device"
printf '%-20s' "${device#${root%/}}"
elif [[ $device = /dev/dm-+([0-9]) ]]; then
# device mapper doesn't allow characters we need to worry
# about being mangled, and it does the escaping of dashes

View File

@@ -15,11 +15,9 @@
. @libdir@/artools/util-base.sh
working_dir=''
files=()
nosetarch=false
copy_mirrorlist=true
basestrap_args=(-Gc)
files=()
chroot_args=()
usage() {
echo "Usage: ${0##*/} [options] working-dir package-list..."
@@ -28,7 +26,6 @@ usage() {
echo ' -M <file> Location of a makepkg config file'
echo ' -c <dir> Set pacman cache'
echo ' -f <file> Copy file from the host to the chroot'
echo ' -m Do not copy mirrorlist to the chroot'
echo ' -s Do not run setarch'
echo ' -h This message'
exit 1
@@ -36,7 +33,7 @@ usage() {
orig_argv=("$0" "$@")
opts='hC:M:c:f:sm'
opts='hC:M:c:f:s'
while getopts ${opts} arg; do
case "${arg}" in
@@ -44,11 +41,12 @@ while getopts ${opts} arg; do
M) makepkg_conf="$OPTARG" ;;
c) cache_dir="$OPTARG" ;;
f) files+=("$OPTARG") ;;
s) nosetarch=true ;;
m) copy_mirrorlist=false; basestrap_args+=(-M) ;;
s) nosetarch=1 ;;
h|?) usage ;;
*) error "invalid argument '%s'" "$arg"; usage ;;
esac
chroot_args+=("-$arg")
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
done
shift $(($OPTIND - 1))
@@ -61,10 +59,10 @@ shift 1
[[ -z $working_dir ]] && die 'Please specify a working directory.'
if [[ -z $cache_dir ]]; then
cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
else
cache_dirs=(${cache_dir})
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
if (( ${#cache_dirs[@]} == 0 )); then
mapfile -t cache_dirs < <($pacconf_cmd CacheDir)
fi
umask 0022
@@ -90,26 +88,15 @@ for f in "${files[@]}"; do
cp "$f" "$working_dir$f"
done
_env=()
while read -r varname; do
_env+=("$varname=${!varname}")
done < <(declare -x | sed -r 's/^declare -x ([^=]*)=.*/\1/' | grep -i '_proxy$')
env -i "${_env[@]}" \
basestrap "${basestrap_args[@]}" ${pacman_conf:+-C "$pacman_conf"} "$working_dir" ${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
echo "${CHROOTVERSION}" > "$working_dir/.artools"
if [[ ! -f "$working_dir/etc/locale.gen.orig" ]];then
mv "$working_dir/etc/locale.gen" "$working_dir/etc/locale.gen.orig"
fi
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"
echo 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf"
echo "${CHROOTVERSION}" > "$working_dir/.artools"
dbus-uuidgen --ensure="$working_dir"/etc/machine-id
chroot_args=(${pacman_conf:+-C "$pacman_conf"} ${makepkg_conf:+-M "$makepkg_conf"} ${cache_dir:+-c "$cache_dir"})
${nosetarch} && chroot_args+=(${nosetarch:+-s})
exec chroot-run \
"${chroot_args[@]}" \
"$working_dir" locale-gen

View File

@@ -15,6 +15,21 @@
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-iso.sh
gen_iso_fn(){
local vars=("artix") name
vars+=("${PROFILE}")
vars+=("${INITSYS}")
case "${REPOSITORY}" in
'gremlins'|'goblins') vars+=("${REPOSITORY}") ;;
esac
vars+=("${ISO_VERSION}")
vars+=("${ARCH}")
for n in ${vars[@]};do
name=${name:-}${name:+-}${n}
done
echo $name
}
prepare_build(){
timer_start=$(get_timer)
@@ -33,7 +48,7 @@ prepare_build(){
iso_label="ARTIX_$(date +%Y%m)"
mkchroot_args+=(-C ${pacman_conf} -m)
basestrap_args+=(-C ${pacman_conf})
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH}
iso_dir="${ISO_POOL}/${PROFILE}"
@@ -73,7 +88,9 @@ build(){
lock_close 9
rm -rf --one-file-system "${work_dir}"
clean_iso_root "${iso_root}"
msg "Deleting isoroot [%s] ..." "${iso_root##*/}"
rm -rf --one-file-system "${iso_root}"
fi
if ${iso_only}; then
@@ -101,10 +118,9 @@ clean_first=true
pretend=false
images_only=false
iso_only=false
log=false
persist=false
mkchroot_args=()
basestrap_args=(-GMc)
cmd=${0##*/}
REPOSITORY=${cmd##*-}
@@ -125,7 +141,6 @@ usage() {
echo ' -x Build images only'
echo ' -z Generate iso only'
echo ' Requires pre built images (-x)'
echo ' -l Log to file'
echo ' -q Query settings and pretend build'
echo ' -h This help'
echo ''
@@ -135,7 +150,7 @@ usage() {
orig_argv=("$0" "$@")
opts='p:r:t:i:g:czxmlqh'
opts='p:r:t:i:g:czxmqh'
while getopts "${opts}" arg; do
case "${arg}" in
@@ -148,7 +163,6 @@ while getopts "${opts}" arg; do
x) images_only=true ;;
z) iso_only=true ;;
m) persist=true ;;
l) log=true ;;
q) pretend=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;

View File

@@ -20,6 +20,7 @@ load_user_info
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
create_first=false
rebuild=false
mkchrootpkg_args=(-c -n)
@@ -27,22 +28,11 @@ cmd=${0##*/}
repo=${cmd#*-}
base_devel=('base-devel')
case ${repo} in
system|world|galaxy) repo='default' ;;
lib32*) base_devel+=('multilib-devel') ;;
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
esac
pacman_conf="${DATADIR}/pacman-${repo}.conf"
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf"
makepkg_conf="${DATADIR}/makepkg.conf"
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf"
usage() {
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
echo " -r <dir> Create chroots in this directory"
echo ' -c Recreate the chroot before building'
echo ' -m Major rebuild'
echo ' -h This help'
echo ''
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
@@ -52,17 +42,34 @@ usage() {
orig_argv=("$0" "$@")
opts='hcr:'
opts='hcmr:'
while getopts "${opts}" arg; do
case "${arg}" in
r) CHROOTS_PKG="$OPTARG" ;;
c) create_first=true ;;
m) rebuild=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
esac
done
if ${rebuild};then
repo='default'
else
case ${repo} in
system|world|galaxy) repo='default' ;;
lib32*) base_devel+=('multilib-devel') ;;
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
esac
fi
pacman_conf="${DATADIR}/pacman-${repo}.conf"
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf"
makepkg_conf="${DATADIR}/makepkg.conf"
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf"
check_root SOURCE_DATE_EPOCH
mkchrootpkg_args+=("${@:$OPTIND}")
@@ -94,7 +101,7 @@ else
-C "${pacman_conf}" \
-M "${makepkg_conf}" \
"${CHROOTS_PKG}/${repo}-${ARCH}/root" \
pacman -Syu --noconfirm || abort
pacman -Syuu --noconfirm || abort
fi
# Always build official packages reproducibly

View File

@@ -29,8 +29,9 @@ pull_tree_arch(){
}
pull_tree_artix(){
local repos=("$1")
cd ${TREE_DIR_ARTIX}
for tree in ${TREE_NAMES_ARTIX[@]};do
for tree in ${repos[@]};do
if [[ -d ${tree} ]];then
config_tree "${tree}"
cd ${tree}
@@ -57,7 +58,7 @@ show_deps(){
[[ $arch == 'any' ]] && CARCH=any
local archver=$(get_full_version $pkg)
local archver=$(get_full_version)
msg2 "repo: %s" "$repo"
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
@@ -73,19 +74,22 @@ show_deps(){
}
from_arch(){
local pkg="$1" src= dest=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
local src= dest=
local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
local repo=$(find_repo "$package")
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 package=${TREE_DIR_ARCH}/$git_tree_arch/${PACKAGE}
local repo=$(find_repo "$package" "${staging}" "${unstable}")
src=$package/repos/$repo
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "$pkg")
local tree_dir=$(get_artix_tree "$pkg" "$git_tree_artix" "$git_tree_arch")
local git_tree_artix=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
local tree_dir=$(get_artix_tree "${PACKAGE}" "$git_tree_artix" "$git_tree_arch")
dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk
dest=${TREE_DIR_ARTIX}/$tree_dir/${PACKAGE}/trunk
msg "tree: %s" "$tree_dir"
show_deps "$src" "$repo"
@@ -95,35 +99,70 @@ from_arch(){
cd ${TREE_DIR_ARTIX}/$git_tree_artix
. $dest/PKGBUILD 2>/dev/null
local artixver=$(get_full_version $pkg)
local artixver=$(get_full_version)
msg2 "Artix Version: %s" "$artixver"
else
subrepo_new "$pkg" "$tree_dir" "$git_tree_arch"
subrepo_new "${PACKAGE}" "$tree_dir" "$git_tree_arch"
fi
msg "Sync (%s) from [%s] to [%s]" "$pkg" "$git_tree_arch" "$tree_dir"
msg "Sync (%s) from [%s] to [%s]" "${PACKAGE}" "$git_tree_arch" "$tree_dir"
sync_pkg "$src" "$dest"
patch_pkg "$pkg"
patch_pkg "${PACKAGE}"
}
view_build(){
local pkg="$1" src=
local git_tree_arch=$(find_tree "${TREE_DIR_ARCH}" "$pkg")
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
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/$pkg
local repo=$(find_repo "$pkg_path")
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"
}
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"
}
sync_repos(){
${sync_arch} && pull_tree_arch
${sync_artix} && pull_tree_artix
if ${sync_artix};then
if ${sync_group}; then
pull_tree_artix "${GROUP}"
else
pull_tree_artix "${TREE_NAMES_ARTIX[*]}"
fi
fi
}
subrepo_new(){
local dest=${TREE_DIR_ARTIX}/${GROUP}/${PACKAGE}/trunk
cd ${TREE_DIR_ARTIX}/${GROUP}
local org=$(get_pkg_org "${PACKAGE}")
create_repo "${PACKAGE}" "$org"
add_repo_to_team "${PACKAGE}" "$org" "${TEAM:-$GROUP}"
subrepo_clone "${PACKAGE}" "$org"
prepare_dir "$dest"
commit_jenkins_files "${PACKAGE}"
}
load_user_info
@@ -139,6 +178,10 @@ import=false
view=false
createnew=false
conf=false
unstable=false
staging=true
sync_group=false
check=false
PACKAGE=''
@@ -150,14 +193,17 @@ usage() {
echo ' -p <pkg> Package name'
echo ' -t <team> Team name (only with -n)'
echo " [default: ${TEAM}]"
echo ' -g <group> Group name, the superrepo (only with -n)'
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 ' -i Import a package from arch repos'
echo ' -n Make new remote subrepo and clone it'
echo ' -v View package depends'
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 ' -h This help'
echo ''
echo ''
@@ -166,18 +212,21 @@ usage() {
orig_argv=("$0" "$@")
opts='p:t:g:sinzyvh'
opts='p:t:g:uwsinzycvh'
while getopts "${opts}" arg; do
case "${arg}" in
p) PACKAGE="$OPTARG" ;;
t) TEAM="$OPTARG" ;;
g) GROUP="$OPTARG" ;;
g) GROUP="$OPTARG"; sync_group=true ;;
s) sync=true ;;
z) sync_arch=false ;;
y) sync_artix=false ;;
i) import=true ;;
n) createnew=true ;;
w) staging=false ;;
u) unstable=true ;;
c) check=true ;;
v) view=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
@@ -191,8 +240,10 @@ prepare_dir "${TREE_DIR_ARCH}"
${sync} && sync_repos
${view} && view_build "${PACKAGE}"
${view} && view_build
${import} && from_arch "${PACKAGE}"
${check} && check_tree
${createnew} && subrepo_new "${PACKAGE}" "${GROUP}" "${TEAM}"
${import} && from_arch
${createnew} && subrepo_new

View File

@@ -17,6 +17,12 @@
shopt -s extglob
if [[ -r '/etc/makepkg.conf' ]]; then
source '/etc/makepkg.conf'
else
die '/etc/makepkg.conf not found!'
fi
load_user_info
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
@@ -35,26 +41,38 @@ STARTDIR=$(pwd)
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
for _pkgname in "${pkgname[@]}"; do
target_pkgver=$(get_full_version "$_pkgname")
comparepkg=$_pkgname
pkgurl=
target_pkgver=$(get_full_version)
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
fi
ln -s "$pkgfile" "$TEMPDIR"
pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname")
if [[ $? -ne 0 ]]; then
die "Couldn't download previous package for %s." "$_pkgname"
if (( $# )); then
case $1 in
/*|*/*)
pkgurl=file://$(readlink -m "$1") ;;
*.pkg.tar*)
pkgurl=$1 ;;
'')
;;
*)
comparepkg=$1 ;;
esac
shift
fi
[[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") ||
die "Couldn't download previous package for %s." "$comparepkg"
oldpkg=${pkgurl##*://*/}
oldpkg=${pkgurl##*/}
if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then
if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
fi
if [[ $pkgurl = file://* ]]; then
if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"

View File

@@ -15,6 +15,22 @@
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
get_path(){
local repo="$1" pkg=trunk/PKGBUILD
if [[ $repo != trunk ]]; then
[[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD
[[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD
fi
echo $pkg
}
prepare_commit(){
local dest="$1"
[[ -d repos/$dest ]] && git rm -r repos/$dest
[[ ! -d repos ]] && mkdir repos
[[ ! -d repos/$dest ]] && mkdir repos/$dest
}
commit_pkg(){
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
if [[ -n ${git_tree} ]];then
@@ -25,9 +41,13 @@ commit_pkg(){
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
. trunk/PKGBUILD
local pkgbuild=$(get_path "${REPO_SRC}")
. $pkgbuild
[[ $arch == 'any' ]] && CARCH=any
local ver=$(get_full_version "${PACKAGE}")
local version=$(get_full_version)
local commit_msg=""
if ${remove};then
@@ -36,14 +56,14 @@ commit_pkg(){
local pkg=${PACKAGE}
git rm -r trunk
else
local pkg="${PACKAGE}-$ver"
local pkg="${PACKAGE}-$version"
git rm -r repos/"${REPO_SRC}-$CARCH"
fi
commit_msg="[${REPO_SRC}] '$pkg' ${action}"
msg "Action: %s" "$commit_msg"
else
local action='modify'
commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}"
commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}"
msg "Action: %s" "$commit_msg"
git add .
@@ -76,17 +96,18 @@ symlink_commit_pkg(){
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
. trunk/PKGBUILD
local pkgbuild=$(get_path "${REPO_SRC}")
. $pkgbuild
[[ $arch == 'any' ]] && CARCH=any
local ver=$(get_full_version "${PACKAGE}")
local version=$(get_full_version)
if [[ ${REPO_SRC} == 'trunk' ]];then
local action='add'
local dest="${REPO_DEST}-$CARCH"
[[ -d repos/$dest ]] && git rm -r repos/$dest
[[ ! -d repos ]] && mkdir repos
[[ ! -d repos/$dest ]] && mkdir repos/$dest
prepare_commit "$dest"
cp trunk/* repos/$dest/
else
@@ -94,14 +115,12 @@ symlink_commit_pkg(){
local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH"
[[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD"
[[ -d repos/$dest ]] && git rm -r repos/$dest
[[ ! -d repos ]] && mkdir repos
[[ ! -d repos/$dest ]] && mkdir repos/$dest
prepare_commit "$dest"
cp repos/$src/* repos/$dest/
git rm -r repos/$src
fi
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$ver' ${action}"
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}"
msg "Action: %s" "$commit_msg"
git add .

View File

@@ -15,73 +15,162 @@
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
compare(){
local pkgpath="$1" group="$2"
local pkg=${pkgpath##*/}
local artixrepo=$(find_repo "$pkgpath" "${staging}" "${unstable}")
local artixshow=${artixrepo%-*}
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%-*}
pkgbuild=$archpath/repos/$archrepo/PKGBUILD
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local archver=$(get_full_version)
fi
local result=$(vercmp "$artixver" "$archver")
local repomatch=false
[[ "$archrepo" == "$artixrepo" ]] && repomatch=true
if ${move};then
if [ $result -gt -1 ];then
case $artixrepo in
*testing*|*staging*)
if $repomatch;then
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
else
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
;;
esac
fi
elif ${upgrades};then
if [ $result -eq -1 ];then
msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
elif ${downgrades};then
if [ $result -eq 1 ];then
if [[ -n $archver ]] && [[ -n $archrepo ]];then
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
fi
fi
fi
unset pkgver epoch pkgrel artixver archver pkgbuild archpath
fi
}
is_db_entry() {
local pkgname="$1" repo="$(arch2artix $2)"
if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then
return 0
fi
return 1
}
check_db(){
local pkgpath="$1"
local pkg=${pkgpath##*/}
local sarch=(any ${ARCH})
local arch_repos=$(arch_repos "${staging}" "${unstable}")
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 "${table2}" "$repo" "$name" "$artixver" "$is_entry"
fi
done
unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase
fi
done
done
}
update_db_cache(){
msg "Updating database cache"
for repo in "${searchrepos[@]}"; do
local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}
rm -rf "$cachedir"
mkdir -p "$cachedir"
msg2 "%s" "$repo"
curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \
| bsdtar -xf - -C "$cachedir"
done
msg "Done"
}
query_db() {
msg_table_header "${table3}" "Repo" "Package" "Library"
for repo in "${searchrepos[@]}"; do
local prefix=
local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/
if [[ -d ${db} ]]; then
while read -rd '' pkg; do
read -r match
pkg=${pkg#${db}}
pkg="${pkg%/*}"
msg_row "${table3}" "${repo}" "${pkg}" "${match}"
done < <(grep -rZ "${library}" "${db}") | sort -u
fi
done
exit 0
}
show_version_table(){
msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version"
if ${check};then
${sync} && update_db_cache
msg_table_header "${table2}" "Repo" "Package" "Version" "Database"
elif ${query};then
${sync} && update_db_cache
query_db
else
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
fi
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
local pkg=${package##*/}
local artixrepo=$(find_repo "$package" "${staging}" "${unstable}")
local artixshow=${artixrepo%-*}
local pkgbuild=$package/repos/$artixrepo/PKGBUILD
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local artixver=$(get_full_version $pkg)
local archpath=$(get_import_path $pkg)
local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}")
local archshow=${archrepo%-*}
pkgbuild=$archpath/repos/$archrepo/PKGBUILD
if [[ -f $pkgbuild ]];then
. $pkgbuild 2>/dev/null
local archver=$(get_full_version $pkg)
fi
local result=$(vercmp "$artixver" "$archver")
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 "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
else
msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
fi
;;
esac
fi
elif ${upgrades};then
if [ $result -eq -1 ];then
msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
fi
elif ${downgrades};then
if [ $result -eq 1 ];then
if [[ -n $archver ]] && [[ -n $archrepo ]];then
msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
fi
fi
fi
unset pkgver epoch pkgrel artixver archver pkgbuild archpath
if ${check};then
check_db "$package"
else
compare "$package" "$tree"
fi
done
done
@@ -98,14 +187,35 @@ staging=true
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'
)
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
readonly table2="%-20s %-35s %-30s %-10s"
readonly table3="%-20s %-45s %s"
searchrepos=(${artix_repos[@]})
usage() {
echo "Usage: ${0##*/} [options]"
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 " -s Sync repo databases"
echo " -q Query repo databases for so libs"
echo ' -r <repo> Repo name to query'
echo ' [default: all]'
echo ' -h This help'
echo ''
echo ''
@@ -114,7 +224,7 @@ usage() {
orig_argv=("$0" "$@")
opts='udmxyh'
opts='r:qcsudmxyh'
while getopts "${opts}" arg; do
case "${arg}" in
@@ -123,6 +233,10 @@ while getopts "${opts}" arg; do
m) move=true ;;
x) staging=false ;;
y) unstable=true ;;
c) check=true ;;
s) sync=true ;;
q) query=true ;;
r) searchrepos=("$OPTARG") ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
esac
@@ -130,4 +244,6 @@ done
shift $(($OPTIND - 1))
library="$1"; shift
show_version_table

View File

@@ -15,8 +15,81 @@
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
find_cached_pkgfile() {
local searchdirs=("$PKGDEST" "$PWD") results=()
local pkg="$1"
for dir in "${searchdirs[@]}"; do
[[ -d $dir ]] || continue
results+=$(find "$dir" -type f -name "$pkg")
done
case ${#results[*]} in
0)
return 1
;;
1)
printf '%s\n' "${results[0]}"
return 0
;;
*)
error 'Multiple packages found:'
printf '\t%s\n' "${results[@]}" >&2
return 1
;;
esac
}
get_pkgbasename(){
local pkg="$1"
local pkgbasename name ver rel arch
pkgbasename=${pkg%.pkg.tar.?z}
arch=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$arch"}
rel=${pkgbasename##*-}
pkgbasename=${pkgbasename%-"$rel"}
ver=${pkgbasename##*-}
name=${pkgbasename%-"$ver"}
echo $name
}
update_repo2(){
local repo="$1"
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
for name in ${passfiles[@]}; do
if pkgfile=$(find_cached_pkgfile "$name");then
info "Found: %s" "$name"
if ${add_pkg};then
local action='add'
packages+=("$name")
# checkpkg "${pkgfile}" || return 2
if ${sign_pkg};then
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
signfile ${pkgfile}
fi
ln -sf ${pkgfile}{,.sig} $repo_path/
elif ${del_pkg};then
local action='remove'
packages+=("$(get_pkgbasename "$name")")
[[ -e $repo_path/$name ]] && rm $repo_path/$name
[[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig
fi
fi
done
cd $repo_path
if [[ -n $action ]]; then
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
fi
return 0
}
update_repo(){
local repo="$1" pkgfile ver ext=db.tar.xz
local repo="$1" pkgfile ver
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
. PKGBUILD
@@ -29,7 +102,7 @@ update_repo(){
for name in ${pkgsearch[@]}; do
pkgarch=$(get_pkg_arch "$name")
ver=$(get_full_version "$name")
ver=$(get_full_version)
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
local pkg=${pkgfile##*/}
info "Found: %s" "$pkg"
@@ -51,7 +124,11 @@ update_repo(){
fi
done
cd $repo_path
[[ -n $action ]] && repo-$action -R $repo.$ext ${packages[@]}
if [[ -n $action ]]; then
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
fi
return 0
}
@@ -64,6 +141,7 @@ load_vars /etc/makepkg.conf
add_pkg=false
del_pkg=false
sign_pkg=false
linksdb=false
cmd=${0##*/}
dest_repo=${cmd#*-}
@@ -72,6 +150,7 @@ usage() {
echo "Usage: ${cmd} [options]"
echo ' -a Add package(s) to repository'
echo ' -r Remove package(s) from repository'
echo ' -l Use links db'
echo ' -s Sign package(s)'
echo ' -h This help'
echo ''
@@ -79,12 +158,13 @@ usage() {
exit $1
}
opts='arsh'
opts='arlsh'
while getopts "${opts}" arg; do
case "${arg}" in
a) add_pkg=true; del_pkg=false ;;
r) del_pkg=true; add_pkg=false ;;
l) linksdb=true ;;
s) sign_pkg=true ;;
h|?) usage 0 ;;
*) echo "invalid argument '${arg}'"; usage 1 ;;
@@ -93,6 +173,12 @@ done
shift $(($OPTIND - 1))
passfiles="$@"
prepare_dir "${REPOS_ROOT}"
update_repo "${dest_repo}"
if [[ -n ${passfiles[@]} ]]; then
update_repo2 "${dest_repo}"
else
update_repo "${dest_repo}"
fi

View File

@@ -15,23 +15,6 @@
. @libdir@/artools/util-base.sh
. @libdir@/artools/util-pkg.sh
# $1: sofile
# $2: soarch
process_sofile() {
# extract the library name: libfoo.so
local soname="${1%.so?(+(.+([0-9])))}".so
# extract the major version: 1
soversion="${1##*\.so\.}"
if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then
return
fi
if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then
# libfoo.so=1-64
msg "${soname}=${soversion}-$2"
soobjects+=("${soname}=${soversion}-$2")
fi
}
set -e
shopt -s extglob
@@ -42,7 +25,7 @@ if [[ $1 = "--ignore-internal" ]]; then
shift
fi
script_mode=${0##*/find-lib}
script_mode=${BASH_SOURCE[0]##*/find-lib}
case $script_mode in
deps|provides) true;;
@@ -57,9 +40,9 @@ if [[ -z $1 ]]; then
fi
if [[ -d $1 ]]; then
pushd $1 >/dev/null
pushd "$1" >/dev/null
else
WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX")
setup_workdir
case ${script_mode} in
deps) bsdtar -C "$WORKDIR" -xf "$1";;
@@ -69,12 +52,27 @@ else
pushd "$WORKDIR" >/dev/null
fi
process_sofile() {
# extract the library name: libfoo.so
soname="${sofile%.so?(+(.+([0-9])))}".so
# extract the major version: 1
soversion="${sofile##*\.so\.}"
if [[ "$soversion" = "$sofile" ]] && ((IGNORE_INTERNAL)); then
return
fi
if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then
# libfoo.so=1-64
echo "${soname}=${soversion}-${soarch}"
soobjects+=("${soname}=${soversion}-${soarch}")
fi
}
case $script_mode in
deps) find_args=(-perm -u+x);;
provides) find_args=(-name *.so*);;
provides) find_args=(-name '*.so*');;
esac
find $PWD -type f "${find_args[@]}" | while read filename; do
find . -type f "${find_args[@]}" | while read -r filename; do
if [[ $script_mode = "provides" ]]; then
# ignore if we don't have a shared object
if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
@@ -90,11 +88,11 @@ find $PWD -type f "${find_args[@]}" | while read filename; do
# get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1
sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
[[ -z $sofile ]] && sofile="${filename##*/}"
process_sofile "${sofile}" "${soarch}"
process_sofile
elif [[ $script_mode = "deps" ]]; then
# process all libraries needed by the binary
for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do
process_sofile "${sofile}" "${soarch}"
process_sofile
done
fi
done

View File

@@ -25,24 +25,26 @@ if [[ -z $match ]]; then
exit 1
fi
find $PWD -type d | while read d; do
find . -type d -print0 2>/dev/null| while read -r -d '' d; do
if [[ -f "$d/PKGBUILD" ]]; then
unset pkgname depends makedepends optdepends
pkgname=() depends=() makedepends=() optdepends=()
# shellcheck source=PKGBUILD.proto
. "$d/PKGBUILD"
for dep in "${depends[@]}"; do
# lose the version comparator, if any
depname=${dep%%[<>=]*}
[[ $depname = $match ]] && msg "$d (depends)"
[[ $depname = "$match" ]] && msg "$d (depends)"
done
for dep in "${makedepends[@]}"; do
# lose the version comparator, if any
depname=${dep%%[<>=]*}
[[ $depname = $match ]] && msg "$d (makedepends)"
[[ $depname = "$match" ]] && msg "$d (makedepends)"
done
for dep in "${optdepends[@]/:*}"; do
# lose the version comaparator, if any
depname=${dep%%[<>=]*}
[[ $depname = $match ]] && msg "$d (optdepends)"
[[ $depname = "$match" ]] && msg "$d (optdepends)"
done
fi
done

518
bin/pkg/links-add.in Normal file
View File

@@ -0,0 +1,518 @@
#!/bin/bash
#
# links-add - add a package to a given repo database file
# links-remove - remove a package entry from a given repo database file
#
# Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
# Copyright (c) 2019 artoo@artixlinux.org
#
# 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; either version 2 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
shopt -s extglob
declare -r REPO_DB_NAME="links"
QUIET=0
ONLYADDNEW=0
SIGN=0
KEY=0
VERIFY=0
REPO_DB_FILE=
REPO_DB_PREFIX=
REPO_DB_SUFFIX=
LOCKFILE=
CLEAN_LOCK=0
. @libdir@/artools/util-base.sh
# ensure we have a sane umask set
umask 0022
# print usage instructions
usage() {
cmd=${0##*/}
printf -- "%s \n\n" "$cmd"
if [[ $cmd == "links-add" ]] ; then
printf -- "Usage: links-add [options] <path-to-db> <package> ...\n"
printf -- "\n"
printf -- "\
links-add will update a package database by reading a package file.\n\
Multiple packages to add can be specified on the command line.\n"
printf -- "\n"
printf -- "Options:\n"
printf -- " -n, --new only add packages that are not already in the database\n"
elif [[ $cmd == "links-remove" ]] ; then
printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n"
printf -- "\n"
printf -- "\
links-remove will update a package database by removing the package name\n\
specified on the command line from the given repo database. Multiple\n\
packages to remove can be specified on the command line.\n"
printf -- "\n"
printf -- "Options:\n"
else
printf -- "Please move along, there is nothing to see here.\n"
return
fi
printf -- " --nocolor turn off color in output\n"
printf -- " -q, --quiet minimize output\n"
printf -- " -s, --sign sign database with GnuPG after update\n"
printf -- " -k, --key <key> use the specified key to sign the database\n"
printf -- " -v, --verify verify database's signature before update\n"
printf -- "\n\
See %s(8) for more details and descriptions of the available options.\n" $cmd
printf "\n"
if [[ $cmd == "links-add" ]] ; then
printf -- "Example: links-add /path/to/repo.${LINKSDBEXT} pacman-5.1.3-1-x86_64.pkg.tar.xz\n"
elif [[ $cmd == "links-remove" ]] ; then
printf -- "Example: links-remove /path/to/repo.${LINKSDBEXT} kernel26\n"
fi
}
find_pkgentry() {
local pkgname=$1
local pkgentry
for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do
name=${pkgentry##*/}
if [[ ${name%-*-*} = $pkgname ]]; then
echo $pkgentry
return 0
fi
done
return 1
}
check_gpg() {
if ! type -p gpg >/dev/null; then
error "Cannot find the gpg binary! Is GnuPG installed?"
exit 1 # $E_MISSING_PROGRAM
fi
if (( ! VERIFY )); then
if ! gpg --list-key ${GPGKEY} &>/dev/null; then
if [[ ! -z $GPGKEY ]]; then
error "The key ${GPGKEY} does not exist in your keyring."
elif (( ! KEY )); then
error "There is no key in your keyring."
fi
exit 1
fi
fi
}
# sign the package database once repackaged
create_signature() {
(( ! SIGN )) && return
local dbfile=$1
local ret=0
msg "Signing database '%s'..." "${dbfile##*/.tmp.}"
local SIGNWITHKEY=""
if [[ -n $GPGKEY ]]; then
SIGNWITHKEY="-u ${GPGKEY}"
fi
gpg --detach-sign --use-agent --no-armor ${SIGNWITHKEY} "$dbfile" &>/dev/null || ret=$?
if (( ! ret )); then
msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig"
else
warning "Failed to sign package database file '%s'" "${dbfile##*/.tmp.}"
fi
}
# verify the existing package database signature
verify_signature() {
(( ! VERIFY )) && return
local dbfile=$1
local ret=0
msg "Verifying database signature..."
if [[ ! -f $dbfile.sig ]]; then
warning "No existing signature found, skipping verification."
return
fi
gpg --verify "$dbfile.sig" || ret=$?
if (( ! ret )); then
msg2 "Database signature file verified."
else
error "Database signature was NOT valid!"
exit 1
fi
}
verify_repo_extension() {
local repofile=$1
case $repofile in
*.links.tar.gz) TAR_OPT="z" ;;
*.links.tar.bz2) TAR_OPT="j" ;;
*.links.tar.xz) TAR_OPT="J" ;;
*.links.tar.zst) TAR_OPT="--zstd" ;;
*.links.tar.Z) TAR_OPT="Z" ;;
*.links.tar) TAR_OPT="" ;;
*) error "'%s' does not have a valid database archive extension." \
"$repofile"
exit 1 ;;
esac
printf '%s' "$TAR_OPT"
}
# write an entry to the pacman database
# arg1 - path to package
db_write_entry() {
# blank out all variables
local pkgfile=$1
local pkgname pkgver
# read info from the zipped package
local line var val
while read -r line; do
[[ ${line:0:1} = '#' ]] && continue
IFS=' =' read -r var val < <(printf '%s\n' "$line")
# normalize whitespace with an extglob
declare "$var=${val//+([[:space:]])/ }"
done< <(bsdtar -xOqf "$pkgfile" .PKGINFO)
# ensure $pkgname and $pkgver variables were found
if [[ -z $pkgname || -z $pkgver ]]; then
error "Invalid package file '%s'." "$pkgfile"
return 1
fi
if [[ -d $tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver ]]; then
warning "An entry for '%s' already existed" "$pkgname-$pkgver"
if (( ONLYADDNEW )); then
return 0
fi
fi
# remove an existing entry if it exists, ignore failures
db_remove_entry "$pkgname"
local tmppkg=$tmpdir/pkg/$pkgname-$pkgver
mkdir "$tmppkg"
bsdtar -xof $pkgfile -C $tmppkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null
pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null
mkdir "$pkgname-$pkgver"
pushd "$pkgname-$pkgver" >/dev/null
# create links entry
msg2 "Creating '%s' db entry..." "${REPO_DB_NAME}"
local linksentry=$tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver/${REPO_DB_NAME}
for f in $(find $tmppkg -type f); do
readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'
done | sort -u > $linksentry
popd >/dev/null
popd >/dev/null
return 0
}
# remove existing entries from the DB
# arg1 - package name
db_remove_entry() {
local pkgname=$1
local notfound=1
local pkgentry=$(find_pkgentry "$pkgname")
while [[ -n $pkgentry ]]; do
notfound=0
msg2 "Removing existing entry '%s'..." \
"${pkgentry##*/}"
rm -rf "$pkgentry"
# remove entries in "links" database
local linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//')
rm -rf "$linksentry"
pkgentry=$(find_pkgentry "$pkgname")
done
return $notfound
}
prepare_repo_db() {
local repodir dbfile
# ensure the path to the DB exists; $LOCKFILE is always an absolute path
repodir=${LOCKFILE%/*}/
if [[ ! -d $repodir ]]; then
error "%s does not exist or is not a directory." "$repodir"
exit 1
fi
# check lock file
if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then
CLEAN_LOCK=1
else
error "Failed to acquire lockfile: %s." "$LOCKFILE"
[[ -f $LOCKFILE ]] && error "Held by process %s" "$(cat "$LOCKFILE")"
exit 1
fi
dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX
if [[ -f $dbfile ]]; then
# there are two situations we can have here:
# a DB with some entries, or a DB with no contents at all.
if ! bsdtar -tqf "$dbfile" '*/links' >/dev/null 2>&1; then
# check empty case
if [[ -n $(bsdtar -tqf "$dbfile" '*' 2>/dev/null) ]]; then
error "Repository file '%s' is not a proper links database." "$dbfile"
exit 1
fi
fi
verify_signature "$dbfile"
msg "Extracting %s to a temporary location..." "${dbfile##*/}"
bsdtar -xf "$dbfile" -C "$tmpdir/${REPO_DB_NAME}"
else
case $cmd in
links-remove)
# only a missing "db" database is currently an error
# TODO: remove if statement
if [[ ${REPO_DB_NAME} == "links" ]]; then
error "Repository file '%s' was not found." "$dbfile"
exit 1
fi
;;
links-add)
# check if the file can be created (write permission, directory existence, etc)
if ! touch "$dbfile"; then
error "Repository file '%s' could not be created." "$dbfile"
exit 1
fi
rm -f "$dbfile"
;;
esac
fi
}
add() {
if [[ ! -f $1 ]]; then
error "File '%s' not found." "$1"
return 1
fi
pkgfile=$1
if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then
error "'%s' is not a package file, skipping" "$pkgfile"
return 1
fi
msg "Adding package '%s'" "$pkgfile"
db_write_entry "$pkgfile"
}
remove() {
pkgname=$1
msg "Searching for package '%s'..." "$pkgname"
if ! db_remove_entry "$pkgname"; then
error "Package matching '%s' not found." "$pkgname"
return 1
fi
return 0
}
rotate_db() {
dirname=${LOCKFILE%/*}
pushd "$dirname" >/dev/null
filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX}
tempname=$dirname/.tmp.$filename
# hardlink or move the previous version of the database and signature to .old
# extension as a backup measure
if [[ -f $filename ]]; then
ln -f "$filename" "$filename.old" 2>/dev/null || \
mv -f "$filename" "$filename.old"
if [[ -f $filename.sig ]]; then
ln -f "$filename.sig" "$filename.old.sig" 2>/dev/null || \
mv -f "$filename.sig" "$filename.old.sig"
else
rm -f "$filename.old.sig"
fi
fi
# rotate the newly-created database and signature into place
mv "$tempname" "$filename"
if [[ -f $tempname.sig ]]; then
mv "$tempname.sig" "$filename.sig"
fi
dblink=${filename%.tar*}
rm -f "$dblink" "$dblink.sig"
ln -s "$filename" "$dblink" 2>/dev/null || \
ln "$filename" "$dblink" 2>/dev/null || \
cp "$filename" "$dblink"
if [[ -f "$filename.sig" ]]; then
ln -s "$filename.sig" "$dblink.sig" 2>/dev/null || \
ln "$filename.sig" "$dblink.sig" 2>/dev/null || \
cp "$filename.sig" "$dblink.sig"
fi
popd >/dev/null
}
create_db() {
TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE")
# $LOCKFILE is already guaranteed to be absolute so this is safe
dirname=${LOCKFILE%/*}
filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX}
# this ensures we create it on the same filesystem, making moves atomic
tempname=$dirname/.tmp.$filename
pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null
if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then
bsdtar -c${TAR_OPT}f "$tempname" *
else
# we have no packages remaining? zip up some emptyness
warning "No packages remain, creating empty database."
bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null
fi
popd >/dev/null
create_signature "$tempname"
}
trap_exit() {
# unhook all traps to avoid race conditions
trap '' EXIT TERM HUP QUIT INT ERR
echo
error "$@"
clean_up 1
}
clean_up() {
local exit_code=${1:-$?}
# unhook all traps to avoid race conditions
trap '' EXIT TERM HUP QUIT INT ERR
[[ -d $tmpdir ]] && rm -rf "$tmpdir"
(( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE"
exit $exit_code
}
# PROGRAM START
case $1 in
-h|--help) usage; exit 0;;
esac
# figure out what program we are
cmd=${0##*/}
if [[ $cmd != "links-add" && $cmd != "links-remove" ]]; then
error "Invalid command name '%s' specified." "$cmd"
exit 1
fi
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/repo-tools.XXXXXXXXXX") || (\
error "Cannot create temp directory for database building."; \
exit 1)
for repo in "pkg" "${REPO_DB_NAME}"; do
mkdir "$tmpdir/$repo"
done
trap 'clean_up' EXIT
for signal in TERM HUP QUIT; do
trap "trap_exit \"$(gettext "%s signal caught. Exiting...")\" \"$signal\"" "$signal"
done
trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
declare -a args
# parse arguments
while (( $# )); do
case $1 in
-q|--quiet) QUIET=1 ;;
-n|--new) ONLYADDNEW=1 ;;
-s|--sign) SIGN=1 ;;
-k|--key) KEY=1 ; shift; GPGKEY=$1 ;;
-v|--verify) VERIFY=1 ;;
*) args+=("$1") ;;
esac
shift
done
REPO_DB_FILE=${args[0]}
if [[ -z $REPO_DB_FILE ]]; then
usage
exit 1
fi
if [[ $REPO_DB_FILE == /* ]]; then
LOCKFILE=$REPO_DB_FILE.lck
else
LOCKFILE=$PWD/$REPO_DB_FILE.lck
fi
verify_repo_extension "$REPO_DB_FILE" >/dev/null
REPO_DB_PREFIX=${REPO_DB_FILE##*/}
REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*}
REPO_DB_SUFFIX=${REPO_DB_FILE##*.links.}
if (( SIGN || VERIFY )); then
check_gpg
fi
if (( VERIFY && ${#args[@]} == 1 )); then
dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX
if [[ -f $dbfile ]]; then
verify_signature "$dbfile"
fi
exit 0
fi
prepare_repo_db
fail=0
for arg in "${args[@]:1}"; do
case $cmd in
links-add) add "$arg" ;;
links-remove) remove "$arg" ;;
esac || fail=1
done
# if the whole operation was a success, re-zip and rotate databases
if (( !fail )); then
msg "Creating updated database file '%s'" "$REPO_DB_FILE"
create_db
rotate_db
else
msg "No packages modified, nothing to do."
exit 1
fi
exit 0

View File

@@ -16,6 +16,29 @@
shopt -s nullglob
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
makepkg_args=("${default_makepkg_args[@]}")
verifysource_args=()
chrootdir=
passeddir=
makepkg_user=
declare -a install_pkgs
declare -i ret=0
keepbuilddir=0
update_first=0
clean_first=0
run_namcap=0
temp_chroot=0
bindmounts_ro=()
bindmounts_rw=()
copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
[[ -z "$copy" || $copy = root ]] && copy=copy
src_owner=${SUDO_USER:-$USER}
usage() {
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
echo ' Run this script in a PKGBUILD dir to build a package inside a'
@@ -118,11 +141,7 @@ delete_chroot() {
stat_done
}
# Usage: install_packages $copydir $pkgs...
install_packages() {
local copydir=$1
local install_pkgs=("${@:2}")
local -a pkgnames
local ret
@@ -133,28 +152,19 @@ install_packages() {
-r "${bindmounts_ro[@]}" \
-r "${bindmounts_rw[@]}" \
"$copydir" \
pacman -U --noconfirm -- "${pkgnames[@]/#//root/}"
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
ret=$?
rm -- "${pkgnames[@]/#/$copydir/root/}"
return $ret
}
# Usage: prepare_chroot $copydir $HOME $keepbuilddir $run_namcap
# Globals:
# - MAKEFLAGS
# - PACKAGER
prepare_chroot() {
local copydir=$1
local USER_HOME=$2
local keepbuilddir=$3
local run_namcap=$4
[[ $keepbuilddir = true ]] || rm -rf "$copydir/build"
(( keepbuilddir )) || rm -rf "$copydir/build"
local builduser_uid builduser_gid
builduser_uid="${SUDO_UID:-$UID}"
builduser_gid="$(id -g "$builduser_uid")"
builduser_uid="$(id -u "$makepkg_user")"
builduser_gid="$(id -g "$makepkg_user")"
local install="install -o $builduser_uid -g $builduser_gid"
local x
@@ -189,7 +199,7 @@ EOF
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
printf '_chrootbuild "$@" || exit\n'
if [[ $run_namcap = true ]]; then
if (( run_namcap )); then
declare -f _chrootnamcap
printf '_chrootnamcap || exit\n'
fi
@@ -215,8 +225,14 @@ _chrootbuild() {
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
ret=$?
case $ret in
0|14)
0)
return 0;;
14)
# whitelist "The package failed to install." but only if there are multiple split packages
# in which case they might be conflicting
local pkgfiles=(/pkgdest/*.pkg.tar.xz)
(( ${#pkgfiles[@]} > 1))
return $?;;
*)
return $ret;;
esac
@@ -230,39 +246,21 @@ _chrootnamcap() {
done
}
# Usage: download_sources $copydir $makepkg_user
# Globals:
# - SRCDEST
download_sources() {
local copydir=$1
local makepkg_user=$2
# local builddir
# builddir="$(mktemp -d)"
# chown "$makepkg_user:" "$builddir"
setup_workdir
chown "$makepkg_user:" "$WORKDIR"
# Ensure sources are downloaded
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o ||
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o "${verifysource_args[@]}" ||
die "Could not download sources."
# Clean up garbage from verifysource
# rm -rf "$builddir"
}
# Usage: move_products $copydir $owner
# Globals:
# - PKGDEST
# - LOGDEST
# - SRCPKGDEST
move_products() {
local copydir=$1
local src_owner=$2
local pkgfile
for pkgfile in "$copydir"/pkgdest/*; do
chown "$src_owner" "$pkgfile"
@@ -295,142 +293,118 @@ move_products() {
orig_argv=("$0" "$@")
main() {
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
makepkg_args=("${default_makepkg_args[@]}")
keepbuilddir=false
update_first=false
clean_first=false
run_namcap=false
temp_chroot=false
chrootdir=
passeddir=
makepkg_user=
declare -a install_pkgs
declare -i ret=0
opts='hcur:I:l:nTD:d:U:'
bindmounts_ro=()
bindmounts_rw=()
while getopts "${opts}" arg; do
case "$arg" in
c) clean_first=1 ;;
D) bindmounts_ro+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
u) update_first=1 ;;
r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;;
n) run_namcap=1; makepkg_args+=(--install) ;;
T) temp_chroot=1; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;;
h|*) usage ;;
esac
done
copy=$USER
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
[[ -z "$copy" || $copy = root ]] && copy=copy
src_owner=${SUDO_USER:-$USER}
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
local opts='hcur:I:l:nTD:d:U:'
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
while getopts "${opts}" arg; do
case "$arg" in
c) clean_first=true ;;
D) bindmounts_ro+=("$OPTARG") ;;
d) bindmounts_rw+=("$OPTARG") ;;
u) update_first=true ;;
r) passeddir="$OPTARG" ;;
I) install_pkgs+=("$OPTARG") ;;
l) copy="$OPTARG" ;;
n) run_namcap=true; makepkg_args+=(--install) ;;
T) temp_chroot=true; copy+="-$$" ;;
U) makepkg_user="$OPTARG" ;;
h|*) usage ;;
esac
done
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir")
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
if [[ ${copy:0:1} = / ]]; then
copydir=$copy
else
copydir="$chrootdir/$copy"
fi
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
# Pass all arguments after -- right to makepkg
makepkg_args+=("${@:$OPTIND}")
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir")
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
# See if -R or -e was passed to makepkg
for arg in "${@:$OPTIND}"; do
case ${arg%%=*} in
--skip*|--holdver) verifysource_args+=("$arg") ;;
--repackage|--noextract) keepbuilddir=1 ;;
--*) ;;
-*R*|-*e*) keepbuilddir=1 ;;
esac
done
if [[ ${copy:0:1} = / ]]; then
copydir=$copy
else
copydir="$chrootdir/$copy"
fi
load_user_info
# Pass all arguments after -- right to makepkg
makepkg_args+=("${@:$OPTIND}")
umask 0022
# See if -R or -e was passed to makepkg
for arg in "${makepkg_args[@]}"; do
case ${arg%%=*} in
--repackage|--noextract) keepbuilddir=true; break ;;
--repackage|--noextract) keepbuilddir=true; break ;;
--*) ;;
-*R*|-*e*) keepbuilddir=true; break ;;
esac
done
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
load_user_info
# Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD
[[ -d $SRCDEST ]] || SRCDEST=$PWD
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
[[ -d $LOGDEST ]] || LOGDEST=$PWD
umask 0022
# Lock the chroot we want to use. We'll keep this lock until we exit.
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
load_vars /etc/makepkg.conf
if [[ ! -d $copydir ]] || (( clean_first )); then
sync_chroot "$chrootdir/root" "$copydir" "$copy"
fi
# Use PKGBUILD directory if these don't exist
[[ -d $PKGDEST ]] || PKGDEST=$PWD
[[ -d $SRCDEST ]] || SRCDEST=$PWD
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
[[ -d $LOGDEST ]] || LOGDEST=$PWD
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
# Lock the chroot we want to use. We'll keep this lock until we exit.
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
if [[ ! -d $copydir ]] || $clean_first; then
sync_chroot "$chrootdir/root" "$copydir" "$copy"
fi
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
$update_first && chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
pacman -Syu --noconfirm
if [[ -n ${install_pkgs[*]:-} ]]; then
install_packages "$copydir" "${install_pkgs[@]}"
ret=$?
# If there is no PKGBUILD we have done
[[ -f PKGBUILD ]] || return $ret
fi
if [[ "$(id -u "$makepkg_user")" == 0 ]]; then
error "Running makepkg as root is not allowed."
exit 1
fi
download_sources "$copydir" "$makepkg_user"
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap"
if chroot-run \
(( update_first )) && chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
then
move_products "$copydir" "$src_owner"
pacman -Syuu --noconfirm
if [[ -n ${install_pkgs[*]:-} ]]; then
install_packages
ret=$?
# If there is no PKGBUILD we are done
[[ -f PKGBUILD ]] || exit $ret
fi
if [[ "$(id -u "$makepkg_user")" == 0 ]]; then
error "Running makepkg as root is not allowed."
exit 1
fi
download_sources
prepare_chroot
if chroot-run \
-r "${bindmounts_ro[*]}" \
-w "${bindmounts_rw[*]}" \
"$copydir" \
/chrootbuild "${makepkg_args[@]}"
then
move_products
else
(( ret += 1 ))
fi
(( temp_chroot )) && delete_chroot "$copydir" "$copy"
if (( ret != 0 )); then
if (( temp_chroot )); then
die "Build failed"
else
(( ret += 1 ))
die "Build failed, check %s/build" "$copydir"
fi
else
true
fi
$temp_chroot && delete_chroot "$copydir" "$copy"
if (( ret != 0 )); then
if $temp_chroot; then
die "Build failed"
else
die "Build failed, check %s/build" "$copydir"
fi
else
true
fi
}
main "$@"

View File

@@ -15,7 +15,7 @@
# gitea user access token
# GIT_TOKEN=''
# HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artix'
# HOST_TREE_ARTIX='gitea@gitea.artixlinux.org:artixlinux'
# TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux
@@ -25,22 +25,31 @@
# packages-kernel
# packages-openrc
# packages-runit
# packages-media
# packages-xorg
# packages-python
# packages-perl
# packages-qt5
# packages-devel
# packages-ruby
# packages-gtk
# packages-gnome
# packages-cinnamon
# packages-lxqt
# packages-mate
# packages-kde
# )
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
# TREE_NAMES_ARCH=(packages community)
# default repos root
# REPOS_ROOT=${WORKSPACE_DIR}/repos
# default mirror for sogrep
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos"
#############################################
################ artools-iso ################
#############################################

View File

@@ -1,63 +0,0 @@
accountsservice
cairo
colord
cppunit
dbus
dbus-glib
dbus-python
desktop-file-utils
fontconfig
geoclue2
glu
gst-plugins-bad
gst-plugins-base
gst-plugins-good
gst-plugins-ugly
gstreamer
harfbuzz
hicolor-icon-theme
libatasmart
libbsd
libdrm
libevdev
libinput
libmbim
libnice
libqmi
libvdpau
libxcb
libxft
libxi
media-player-info
mesa
modemmanager
networkmanager
orc
p11-kit
polkit
poppler
poppler-data
pulseaudio
pyxdg
r
sdl
shared-mime-info
sound-theme-freedesktop
startup-notification
systemdcompat
telepathy-glib
ttf-dejavu
udisks2
upower
wayland
wayland-protocols
webrtc-audio-processing
xcb-proto
xcb-util
xcb-util-cursor
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
xcb-util-wm
xdg-user-dirs
xdg-utils

View File

@@ -1,63 +0,0 @@
adwaita-icon-theme
atk
at-spi2-atk
at-spi2-core
babl
cantarell-fonts
cogl
dconf
flatpak
gamin
gcab
gconf
gcr
gdk-pixbuf2
gegl02
git
glade
glib2
glib-networking
gnome-common
gnome-keyring
gobject-introspection
gsettings-desktop-schemas
gssdp
gtk2
gtk3
gtk-doc
gtksourceview3
gupnp
gupnp-igd
gvfs
json-glib
libcloudproviders
libcroco
libgee
libglade
libgnome-keyring
libgudev
libnotify
librsvg
libsecret
libsoup
libxml2
libxslt
meld
mobile-broadband-provider-info
modemmanager
networkmanager
network-manager-applet
orca
ostree
pango
pyatspi
pygobject
pygobject2
pygtk
rest
ttf-bitstream-vera
vala
vte
vte3
yelp-tools
yelp-xsl

View File

@@ -1,4 +0,0 @@
phonon-gstreamer
polkit-qt
extra-cmake-modules
phonon

View File

@@ -1,17 +0,0 @@
linux
nvidia
nvidia-utils
acpi_call
bbswitch
broadcom-wl
tp_smapi
r8168
virtualbox-modules-artix
linux-lts
nvidia-lts
acpi_call-lts
bbswitch-lts
broadcom-wl-lts
tp_smapi-lts
r8168-lts
linux-firmware

View File

@@ -1,31 +0,0 @@
lxqt-about
lxqt-admin
lxqt-config
lxqt-globalkeys
lxqt-notificationd
lxqt-openssh-askpass
lxqt-panel
lxqt-policykit
lxqt-powermanagement
lxqt-qtplugin
lxqt-runner
lxqt-session
lxqt-sudo
lxqt-themes
lxqt-build-tools
compton-conf
lximage-qt
obconf-qt
openbox
pcmanfm-qt
qterminal
liblxqt
libqtxdg
lxmenu-data
libfm-qt
libfm
qtermwidget
libsysstat
libstatgrab
qps

View File

@@ -1,37 +0,0 @@
libdmx
libfontenc
libice
libpciaccess
libsm
libx11
libxau
libxaw
libxcomposite
libxcursor
libxdamage
libxdmcp
libxext
libxfixes
libxfont2
libxi|libxft
libxinerama
libxkbfile
libxkbui
libxmu
libxpm
libxrandr
libxrender
libxres
libxshmfence
libxss
libxt
libxtst
libxv
libxvmc
libxxf86vm
pixman
xbitmaps
xkeyboard-config
xorgproto
xterm
xtrans

View File

@@ -162,7 +162,7 @@ artix_mount_handler() {
fi
if [[ "${checksum}" == "y" ]]; then
for fs in rootfs desktopfs livefs;do
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..."
@@ -182,7 +182,7 @@ artix_mount_handler() {
fi
if [[ "${verify}" == "y" ]]; then
for fs in rootfs desktopfs livefs;do
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..."
@@ -225,7 +225,7 @@ artix_mount_handler() {
local dest_sfs="/run/artix/sfs" dest_img="/run/artix/img"
local lower_dir
for sfs in livefs desktopfs rootfs;do
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

View File

@@ -40,7 +40,7 @@ artix_pxe_http_mount_handler () {
local _src=${artix_http_srv}${artixbasedir}/${arch}
for sfs in livefs desktopfs rootfs;do
for sfs in livefs rootfs;do
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
_curl_get "${_src}/${sfs}.sfs" "/${arch}"

View File

@@ -21,7 +21,7 @@ is_subvolume() {
}
is_same_fs() {
[[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]]
[[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]]
}
subvolume_delete_recursive() {

View File

@@ -31,7 +31,7 @@ load_vars() {
[[ -f $1 ]] || return 1
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do
[[ -z ${!var:-} ]] && eval "$(grep -a "^${var}=" "$1")"
[[ -z ${!var:-} ]] && eval "$(source "$1"; printf "%s='%s'" "$var" "${!var}")"
done
return 0
@@ -76,19 +76,23 @@ init_artools_pkg(){
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
TREE_NAMES_ARTIX=(
packages
community
packages-kernel
packages-openrc
packages-runit
packages-xorg
packages-python
packages-perl
packages-qt5
packages-ruby
# packages-desktop
# packages-kde
# packages-gnome
packages
community
packages-kernel
packages-openrc
packages-runit
packages-xorg
packages-python
packages-perl
packages-qt5
packages-devel
packages-ruby
packages-gtk
packages-gnome
packages-cinnamon
packages-lxqt
packages-mate
packages-kde
)
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
@@ -102,6 +106,14 @@ init_artools_pkg(){
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
DBEXT=${DBEXT:-'xz'}
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
}
init_artools_iso(){
@@ -147,15 +159,6 @@ load_config(){
return 0
}
user_own(){
local flag=$2
chown ${flag} "${OWNER}:$(id --group ${OWNER})" "$1"
}
user_run(){
su ${OWNER} -c "$@"
}
load_user_info(){
OWNER=${SUDO_USER:-$USER}
@@ -167,6 +170,8 @@ load_user_info(){
USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
prepare_dir "${USERCONFDIR}"
USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
}
# orig_argv=("$0" "$@")

View File

@@ -136,12 +136,24 @@ write_servicescfg_conf(){
printf '%s' "${yaml}"
}
write_unpackfs_conf(){
local yaml=$(write_yaml_header)
yaml+=$(write_empty_line)
yaml+=$(write_yaml_map 0 'unpack')
yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs")
yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs')
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
msg2 "Configuring Calamares"
write_users_conf > "$mods"/users.conf
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
write_unpackfs_conf > "$mods"/unpackfs.conf
sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf
sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf
fi

View File

@@ -29,11 +29,11 @@ prepare_initramfs(){
fi
if [[ -n ${GPG_KEY} ]]; then
user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey"
exec 17<>${USERCONFDIR}/artools/GPG_KEY
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
exec 17<>/tmp/GPG_KEY
fi
local _kernel=$(cat $mnt/usr/lib/modules/*/version)
ARTIX_GNUPG_FD=${GPG_KEY:+17} chroot-run $mnt \
ARTIX_GNUPG_FD=${GPG_KEY:+17} artools-chroot $mnt \
/usr/bin/mkinitcpio -k ${_kernel} \
-c /etc/mkinitcpio-artix.conf \
-g /boot/initramfs.img
@@ -41,8 +41,8 @@ prepare_initramfs(){
if [[ -n ${GPG_KEY} ]]; then
exec 17<&-
fi
if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then
rm ${USERCONFDIR}/artools/GPG_KEY
if [[ -f /tmp/GPG_KEY ]]; then
rm /tmp/GPG_KEY
fi
}
@@ -64,8 +64,9 @@ configure_grub(){
}
prepare_grub(){
local platform=i386-pc img='core.img' grub=$3/boot/grub efi=$3/efi/boot \
lib=$1/usr/lib/grub prefix=/boot/grub theme=$2/usr/share/grub
local platform=i386-pc img='core.img' prefix=/boot/grub
local lib=$1/usr/lib/grub theme=$2/usr/share/grub
local grub=$3/boot/grub efi=$3/efi/boot
prepare_dir ${grub}/${platform}

View File

@@ -12,33 +12,12 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
gen_iso_fn(){
local vars=("artix") name
vars+=("${PROFILE}")
vars+=("${INITSYS}")
case "${REPOSITORY}" in
'gremlins'|'goblins') vars+=("${REPOSITORY}") ;;
esac
vars+=("${ISO_VERSION}")
vars+=("${ARCH}")
for n in ${vars[@]};do
name=${name:-}${name:+-}${n}
done
echo $name
}
clean_iso_root(){
local dest="$1"
msg "Deleting isoroot [%s] ..." "${dest##*/}"
rm -rf --one-file-system "$dest"
}
make_sig () {
local idir="$1" file="$2"
msg2 "Creating signature file..."
cd "$idir"
user_own "$idir"
user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
chown "${OWNER}:$(id --group ${OWNER})" "$idir"
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
chown -R root "$idir"
cd ${OLDPWD}
}

View File

@@ -39,21 +39,12 @@ track_fs() {
mount_overlay(){
FS_ACTIVE_MOUNTS=()
local lower= upper="$1" work="$2" pkglist="$3"
local fs=${upper##*/}
local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs"
local lower= upper="$1" work="$2"
mkdir -p "${mnt_dir}/work"
mkdir -p "$upper"
case $fs in
desktopfs) lower="$rootfs" ;;
livefs)
lower="$rootfs"
[[ -f $pkglist ]] && lower="$desktopfs":"$rootfs"
;;
bootfs)
lower="$livefs":"$rootfs"
[[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs"
;;
case $upper in
*/livefs) lower="$work/rootfs" ;;
*/bootfs) lower="$work/livefs":"$work/rootfs" ;;
esac
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
}

View File

@@ -23,9 +23,6 @@ init_profile(){
[[ -f "$profdir/$prof/Packages-Root" ]] && ROOT_LIST="$profdir/$prof/Packages-Root"
[[ -d "$profdir/$prof/root-overlay" ]] && ROOT_OVERLAY="$profdir/$prof/root-overlay"
[[ -f "$profdir/$prof/Packages-Desktop" ]] && DESKTOP_LIST="$profdir/$prof/Packages-Desktop"
[[ -d "$profdir/$prof/desktop-overlay" ]] && DESKTOP_OVERLAY="$profdir/$prof/desktop-overlay"
[[ -f "$profdir/$prof/Packages-Live" ]] && LIVE_LIST="$profdir/$prof/Packages-Live"
[[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay"
}

View File

@@ -27,20 +27,6 @@ error_function() {
exit 2
}
# $1: function
run_log(){
local func="$1" log_dir='/var/log/artools'
[[ ! -d $log_dir ]] && mkdir -p $log_dir
local logfile=${log_dir}/$(gen_iso_fn).$func.log
logpipe=$(mktemp -u "/tmp/$func.pipe.XXXXXXXX")
mkfifo "$logpipe"
tee "$logfile" < "$logpipe" &
local teepid=$!
$func &> "$logpipe"
wait $teepid
rm "$logpipe"
}
run_safe() {
local restoretrap func="$1"
set -e
@@ -48,11 +34,7 @@ run_safe() {
restoretrap=$(trap -p ERR)
trap 'error_function $func' ERR
if ${log};then
run_log "$func"
else
"$func"
fi
"$func"
eval $restoretrap
set +E
@@ -96,12 +78,6 @@ make_iso() {
msg "Done [Build ISO]"
}
install_packages(){
local fs="$1"
setarch "${ARCH}" mkchroot \
"${mkchroot_args[@]}" "${fs}" "${packages[@]}"
}
copy_overlay(){
local src="$1" dest="$2"
if [[ -e "$src" ]];then
@@ -114,10 +90,6 @@ clean_up_image(){
local path mnt="$1"
msg2 "Cleaning [%s]" "${mnt##*/}"
if [[ -f "$mnt/etc/locale.gen.orig" ]];then
mv "$mnt/etc/locale.gen.orig" "$mnt/etc/locale.gen"
rm "$mnt/etc/locale.conf"
fi
path=$mnt/boot
if [[ -d "$path" ]]; then
find "$path" -name 'initramfs*.img' -delete &> /dev/null
@@ -142,11 +114,6 @@ clean_up_image(){
if [[ -d $path ]];then
find "$path" -mindepth 1 -delete &> /dev/null
fi
if [[ ${mnt##*/} == 'livefs' ]];then
rm -rf "$mnt/etc/pacman.d/gnupg"
fi
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
rm $mnt/boot/grub/grub.cfg
@@ -163,36 +130,18 @@ make_rootfs() {
prepare_dir "${rootfs}"
install_packages "${rootfs}"
basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
clean_up_image "${rootfs}"
: > ${work_dir}/rootfs.lock
msg "Done [Base installation] (rootfs)"
fi
}
make_desktopfs() {
if [[ ! -e ${work_dir}/desktopfs.lock ]]; then
msg "Prepare [Desktop installation] (desktopfs)"
local desktopfs="${work_dir}/desktopfs"
prepare_dir "${desktopfs}"
mount_overlay "${desktopfs}" "${work_dir}"
install_packages "${desktopfs}"
copy_overlay "${DESKTOP_OVERLAY}" "${desktopfs}"
umount_overlay
clean_up_image "${desktopfs}"
msg "Done [Desktop installation] (desktopfs)"
fi
}
make_livefs() {
if [[ ! -e ${work_dir}/livefs.lock ]]; then
msg "Prepare [Live installation] (livefs)"
@@ -200,9 +149,9 @@ make_livefs() {
prepare_dir "${livefs}"
mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}"
mount_overlay "${livefs}" "${work_dir}"
install_packages "${livefs}"
basestrap "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
@@ -212,6 +161,8 @@ make_livefs() {
clean_up_image "${livefs}"
: > ${work_dir}/livefs.lock
msg "Done [Live installation] (livefs)"
fi
}
@@ -227,7 +178,7 @@ make_bootfs() {
local bootfs="${work_dir}/bootfs"
mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}"
mount_overlay "${bootfs}" "${work_dir}"
prepare_initcpio "${bootfs}"
prepare_initramfs "${bootfs}"
@@ -259,7 +210,7 @@ make_grub(){
compress_images(){
local timer=$(get_timer)
run_safe "make_iso"
user_own "${iso_dir}" "-R"
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
show_elapsed_time "${FUNCNAME}" "${timer}"
}
@@ -267,10 +218,6 @@ prepare_images(){
local timer=$(get_timer)
load_pkgs "${ROOT_LIST}" "${INITSYS}"
run_safe "make_rootfs"
if [[ -f "${DESKTOP_LIST}" ]] ; then
load_pkgs "${DESKTOP_LIST}" "${INITSYS}"
run_safe "make_desktopfs"
fi
if [[ -f ${LIVE_LIST} ]]; then
load_pkgs "${LIVE_LIST}" "${INITSYS}"
run_safe "make_livefs"

View File

@@ -23,14 +23,12 @@ get_remote_head(){
get_pkg_org(){
local pkg="$1" org= sub=
case ${pkg} in
ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;;
perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;;
python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;;
python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;;
lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;;
# lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;;
*) org=${pkg:0:1}; echo "packages${org^^}" ;;
ruby-*) org="packagesRuby" ;;
perl-*) org="packagesPerl" ;;
python-*|python2-*) org="packagesPython" ;;
*) sub=${pkg:0:1}; org="packages${sub^^}" ;;
esac
echo $org
}
subrepo_push(){
@@ -141,22 +139,3 @@ config_tree(){
fi
cd ..
}
subrepo_new(){
local pkg="$1" tree="$2" team="${3:-$2}"
local dest=${TREE_DIR_ARTIX}/$tree/$pkg/trunk
cd ${TREE_DIR_ARTIX}/$tree
local org=$(get_pkg_org "$pkg")
create_repo "$pkg" "$org"
add_repo_to_team "$pkg" "$org" "$team"
subrepo_clone "$pkg" "$org"
prepare_dir "$dest"
commit_jenkins_files "$pkg"
}

View File

@@ -69,6 +69,25 @@ patch_pkg(){
esac
}
arch2artix(){
local repo="$1" artix=none
case "$repo" in
core) artix=system ;;
extra) artix=world ;;
community) artix=galaxy ;;
multilib) artix=lib32 ;;
staging) artix=goblins ;;
testing) artix=gremlins ;;
community-staging) artix=galaxy-goblins ;;
community-testing) artix=galaxy-gremlins ;;
multilib-staging) artix=lib32-goblins ;;
multilib-testing) artix=lib32-gremlins ;;
kde-unstable) artix=kde-wobble ;;
gnome-unstable) artix=gnome-wobble ;;
esac
echo $artix
}
find_tree(){
local tree="$1" pkg="$2"
local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg")
@@ -76,22 +95,40 @@ find_tree(){
echo ${result##*/}
}
find_repo(){
local pkg="$1" stag="$2" unst="$3" repo=
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)
for r in ${repos[@]};do
[[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64
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(){
local pkglist="${DATADIR}/pkglists/$1.list"
local pkglist="${SYSCONFDIR}/pkglist.d/$1.list"
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean"))
@@ -107,22 +144,24 @@ get_artix_tree(){
local pkg="$1" artix_tree="${2:-$3}" tree
eval "case $pkg in
$(get_cases kernel)) tree=packages-kernel ;;
python-*|python2-*) tree=packages-python ;;
perl-*) tree=packages-perl ;;
ruby-*) tree=packages-ruby ;;
xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;;
*-openrc) tree=packages-openrc ;;
*-runit) tree=packages-runit ;;
qt5-*) tree=packages-qt5 ;;
lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;;
$(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 media)) tree=packages-media ;;
$(get_cases xorg)) tree=packages-xorg ;;
$(get_cases qt5)) tree=packages-qt5 ;;
$(get_cases gtk)) tree=packages-gtk ;;
$(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 ;;
*) tree=$artix_tree
esac"
echo $tree
# $(get_cases freedesktop)) tree=packages-desktop ;;
# $(get_cases kde)) tree=packages-kde ;;
# $(get_cases gnome)) tree=packages-gnome ;;
}
get_import_path(){
@@ -143,14 +182,6 @@ pkgver_equal() {
fi
}
is_valid_repo(){
local src="$1"
case $src in
core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;;
*) return 1 ;;
esac
}
find_cached_package() {
local searchdirs=("$PKGDEST" "$PWD") results=()
local targetname=$1 targetver=$2 targetarch=$3