forked from artix/artools
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
d5ba8ed404 | |||
daf4c8283e | |||
7b65c27025 | |||
433a747da9 | |||
015c4f0658 | |||
b1dd485ec0 | |||
316514698e | |||
614d6e19c8 | |||
9c650134c4 | |||
b849cadbae | |||
f1067bcd60 | |||
3942dde012 | |||
30a6c61f52 |
9
Makefile
9
Makefile
@@ -1,6 +1,6 @@
|
||||
VERSION=0.14
|
||||
|
||||
CHROOT_VERSION=0.9
|
||||
CHROOT_VERSION=0.10
|
||||
|
||||
TOOLS = artools
|
||||
PREFIX ?= /usr
|
||||
@@ -38,7 +38,10 @@ PKG_BIN = \
|
||||
bin/pkg/pkg2yaml \
|
||||
bin/pkg/buildtree \
|
||||
bin/pkg/lddd \
|
||||
bin/pkg/links-add
|
||||
bin/pkg/links-add \
|
||||
bin/pkg/checkpkg \
|
||||
bin/pkg/finddeps \
|
||||
bin/pkg/find-libdeps
|
||||
|
||||
LN_COMMITPKG = \
|
||||
extrapkg \
|
||||
@@ -164,6 +167,8 @@ install_pkg:
|
||||
install $(DIRMODE) $(DESTDIR)$(BINDIR)
|
||||
install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR)
|
||||
|
||||
$(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
|
||||
|
@@ -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
|
||||
|
@@ -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,7 +111,6 @@ 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
|
||||
|
||||
for cache_dir in ${cache_dirs[@]:1}; do
|
||||
@@ -109,7 +124,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 +150,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}" "$@"
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -33,7 +33,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}"
|
||||
@@ -104,7 +104,7 @@ iso_only=false
|
||||
log=false
|
||||
persist=false
|
||||
|
||||
mkchroot_args=()
|
||||
basestrap_args=()
|
||||
cmd=${0##*/}
|
||||
|
||||
REPOSITORY=${cmd##*-}
|
||||
|
@@ -94,7 +94,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
|
||||
|
@@ -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}
|
||||
@@ -123,7 +124,13 @@ view_build(){
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
load_user_info
|
||||
@@ -141,6 +148,7 @@ createnew=false
|
||||
conf=false
|
||||
unstable=false
|
||||
staging=true
|
||||
sync_group=false
|
||||
|
||||
PACKAGE=''
|
||||
|
||||
@@ -152,7 +160,7 @@ 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"
|
||||
@@ -176,7 +184,7 @@ 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 ;;
|
||||
|
98
bin/pkg/checkpkg.in
Normal file
98
bin/pkg/checkpkg.in
Normal file
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2018-19 artoo@artixlinux.org
|
||||
# Copyright (C) 2018 Artix Linux Developers
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
. @libdir@/artools/util-base.sh
|
||||
. @libdir@/artools/util-pkg.sh
|
||||
|
||||
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"
|
||||
load_vars /etc/makepkg.conf
|
||||
|
||||
if [[ ! -f PKGBUILD ]]; then
|
||||
die 'This must be run in the directory of a built package.'
|
||||
fi
|
||||
|
||||
. ./PKGBUILD
|
||||
if [[ $arch == 'any' ]]; then
|
||||
CARCH='any'
|
||||
fi
|
||||
|
||||
STARTDIR=$(pwd)
|
||||
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
|
||||
|
||||
for _pkgname in "${pkgname[@]}"; do
|
||||
comparepkg=$_pkgname
|
||||
pkgurl=
|
||||
target_pkgver=$(get_full_version "$_pkgname")
|
||||
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"
|
||||
|
||||
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##*/}
|
||||
|
||||
if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then
|
||||
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
|
||||
fi
|
||||
|
||||
if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then
|
||||
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
|
||||
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
|
||||
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"
|
||||
elif [[ -f "$STARTDIR/$oldpkg" ]]; then
|
||||
ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg"
|
||||
else
|
||||
curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl"
|
||||
fi
|
||||
|
||||
bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old"
|
||||
bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname"
|
||||
|
||||
sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname"
|
||||
|
||||
find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old"
|
||||
find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname"
|
||||
if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then
|
||||
msg "Sonames differ in %s!" "$_pkgname"
|
||||
echo "$diff_output"
|
||||
else
|
||||
msg "No soname differences for %s" "$_pkgname."
|
||||
fi
|
||||
done
|
@@ -50,9 +50,9 @@ compare(){
|
||||
case $artixrepo in
|
||||
*testing*|*staging*)
|
||||
if $repomatch;then
|
||||
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
||||
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||
else
|
||||
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
||||
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@@ -61,14 +61,14 @@ compare(){
|
||||
elif ${upgrades};then
|
||||
|
||||
if [ $result -eq -1 ];then
|
||||
msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
||||
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"
|
||||
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -198,8 +198,8 @@ artix_repos=(
|
||||
'gnome-wobble' 'kde-wobble'
|
||||
)
|
||||
|
||||
readonly table="%-20s %-20s %-25s %-25s %-25s %-20s"
|
||||
readonly table2="%-20s %-35s %-20s %-10s"
|
||||
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
|
||||
readonly table2="%-20s %-35s %-30s %-10s"
|
||||
readonly table3="%-20s %-45s %s"
|
||||
|
||||
searchrepos=(${artix_repos[@]})
|
||||
|
100
bin/pkg/find-libdeps.in
Normal file
100
bin/pkg/find-libdeps.in
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2018-19 artoo@artixlinux.org
|
||||
# Copyright (C) 2018 Artix Linux Developers
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
. @libdir@/artools/util-base.sh
|
||||
. @libdir@/artools/util-pkg.sh
|
||||
|
||||
set -e
|
||||
shopt -s extglob
|
||||
|
||||
IGNORE_INTERNAL=0
|
||||
|
||||
if [[ $1 = "--ignore-internal" ]]; then
|
||||
IGNORE_INTERNAL=1
|
||||
shift
|
||||
fi
|
||||
|
||||
script_mode=${BASH_SOURCE[0]##*/find-lib}
|
||||
|
||||
case $script_mode in
|
||||
deps|provides) true;;
|
||||
*) die "Unknown mode %s" "$script_mode" ;;
|
||||
esac
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
echo "${0##*/} [options] <package file|extracted package dir>"
|
||||
echo "Options:"
|
||||
echo " --ignore-internal ignore internal libraries"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -d $1 ]]; then
|
||||
pushd "$1" >/dev/null
|
||||
else
|
||||
setup_workdir
|
||||
|
||||
case ${script_mode} in
|
||||
deps) bsdtar -C "$WORKDIR" -xf "$1";;
|
||||
provides) bsdtar -C "$WORKDIR" -xf "$1" --include="*.so*";;
|
||||
esac
|
||||
|
||||
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*');;
|
||||
esac
|
||||
|
||||
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
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# get architecture of the file; if soarch is empty it's not an ELF binary
|
||||
soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p')
|
||||
[[ -n $soarch ]] || continue
|
||||
|
||||
if [[ $script_mode = "provides" ]]; then
|
||||
# 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
|
||||
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
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
popd >/dev/null
|
49
bin/pkg/finddeps.in
Normal file
49
bin/pkg/finddeps.in
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2018-19 artoo@artixlinux.org
|
||||
# Copyright (C) 2018 Artix Linux Developers
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
. @libdir@/artools/util-base.sh
|
||||
|
||||
match=$1
|
||||
|
||||
if [[ -z $match ]]; then
|
||||
echo 'Usage: finddeps <depname>'
|
||||
echo ''
|
||||
echo 'Find packages that depend on a given depname.'
|
||||
echo 'Run this script from the top-level directory of your ABS tree.'
|
||||
echo ''
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find . -type d -print0 2>/dev/null| while read -r -d '' d; do
|
||||
if [[ -f "$d/PKGBUILD" ]]; then
|
||||
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" ]] && echo "$d (depends)"
|
||||
done
|
||||
for dep in "${makedepends[@]}"; do
|
||||
# lose the version comparator, if any
|
||||
depname=${dep%%[<>=]*}
|
||||
[[ $depname = "$match" ]] && echo "$d (makedepends)"
|
||||
done
|
||||
for dep in "${optdepends[@]/:*}"; do
|
||||
# lose the version comaparator, if any
|
||||
depname=${dep%%[<>=]*}
|
||||
[[ $depname = "$match" ]] && echo "$d (optdepends)"
|
||||
done
|
||||
fi
|
||||
done
|
@@ -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 "$@"
|
||||
|
@@ -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
|
||||
|
||||
@@ -44,8 +44,6 @@
|
||||
|
||||
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
|
||||
|
||||
# TREE_NAMES_ARCH=(packages community)
|
||||
|
||||
# default repos root
|
||||
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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}"
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -153,7 +153,7 @@ configure_calamares(){
|
||||
msg2 "Configuring Calamares"
|
||||
write_users_conf > "$mods"/users.conf
|
||||
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
|
||||
[[ -z ${DESKTOP_LIST} ]] && write_unpackfs_conf > "$mods"/unpackfs.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
|
||||
|
@@ -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"
|
||||
}
|
||||
|
@@ -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"
|
||||
}
|
||||
|
@@ -96,12 +96,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 +108,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
|
||||
@@ -143,9 +133,9 @@ clean_up_image(){
|
||||
find "$path" -mindepth 1 -delete &> /dev/null
|
||||
fi
|
||||
|
||||
if [[ ${mnt##*/} == 'livefs' ]];then
|
||||
rm -rf "$mnt/etc/pacman.d/gnupg"
|
||||
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
|
||||
@@ -163,36 +153,19 @@ make_rootfs() {
|
||||
|
||||
prepare_dir "${rootfs}"
|
||||
|
||||
install_packages "${rootfs}"
|
||||
basestrap -GMc "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
|
||||
echo "${CHROOTVERSION}" > "${rootfs}/.artools"
|
||||
|
||||
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 +173,9 @@ make_livefs() {
|
||||
|
||||
prepare_dir "${livefs}"
|
||||
|
||||
mount_overlay "${livefs}" "${work_dir}" "${DESKTOP_LIST}"
|
||||
mount_overlay "${livefs}" "${work_dir}"
|
||||
|
||||
install_packages "${livefs}"
|
||||
basestrap -GMc "${basestrap_args[@]}" "${livefs}" "${packages[@]}"
|
||||
|
||||
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
|
||||
|
||||
@@ -212,6 +185,8 @@ make_livefs() {
|
||||
|
||||
clean_up_image "${livefs}"
|
||||
|
||||
: > ${work_dir}/livefs.lock
|
||||
|
||||
msg "Done [Live installation] (livefs)"
|
||||
fi
|
||||
}
|
||||
@@ -227,7 +202,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}"
|
||||
@@ -267,10 +242,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"
|
||||
|
Reference in New Issue
Block a user