forked from artix/artools
Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
1a5ea6c4ee | |||
486acaf47a | |||
d5ba8ed404 | |||
daf4c8283e | |||
7b65c27025 | |||
433a747da9 | |||
015c4f0658 | |||
b1dd485ec0 | |||
316514698e | |||
614d6e19c8 | |||
9c650134c4 | |||
b849cadbae | |||
f1067bcd60 | |||
3942dde012 | |||
30a6c61f52 |
9
Makefile
9
Makefile
@@ -1,6 +1,6 @@
|
|||||||
VERSION=0.14
|
VERSION=0.14
|
||||||
|
|
||||||
CHROOT_VERSION=0.9
|
CHROOT_VERSION=0.10
|
||||||
|
|
||||||
TOOLS = artools
|
TOOLS = artools
|
||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
@@ -38,7 +38,10 @@ PKG_BIN = \
|
|||||||
bin/pkg/pkg2yaml \
|
bin/pkg/pkg2yaml \
|
||||||
bin/pkg/buildtree \
|
bin/pkg/buildtree \
|
||||||
bin/pkg/lddd \
|
bin/pkg/lddd \
|
||||||
bin/pkg/links-add
|
bin/pkg/links-add \
|
||||||
|
bin/pkg/checkpkg \
|
||||||
|
bin/pkg/finddeps \
|
||||||
|
bin/pkg/find-libdeps
|
||||||
|
|
||||||
LN_COMMITPKG = \
|
LN_COMMITPKG = \
|
||||||
extrapkg \
|
extrapkg \
|
||||||
@@ -164,6 +167,8 @@ install_pkg:
|
|||||||
install $(DIRMODE) $(DESTDIR)$(BINDIR)
|
install $(DIRMODE) $(DESTDIR)$(BINDIR)
|
||||||
install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR)
|
install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR)
|
||||||
|
|
||||||
|
$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides
|
||||||
|
|
||||||
$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove
|
$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove
|
||||||
|
|
||||||
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
|
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
|
||||||
|
@@ -36,18 +36,16 @@ copy_keyring(){
|
|||||||
|
|
||||||
create_min_fs(){
|
create_min_fs(){
|
||||||
msg "Creating install root at %s" "$1"
|
msg "Creating install root at %s" "$1"
|
||||||
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,etc}
|
mkdir -m 0755 -p $1/var/{cache/pacman/pkg,lib/pacman,log} $1/{dev,run,etc/pacman.d}
|
||||||
mkdir -m 1777 -p $1/{tmp,run}
|
mkdir -m 1777 -p $1/tmp
|
||||||
mkdir -m 0555 -p $1/{sys,proc}
|
mkdir -m 0555 -p $1/{sys,proc}
|
||||||
}
|
}
|
||||||
|
|
||||||
newroot=/mnt
|
newroot=/mnt
|
||||||
|
|
||||||
hostcache=false
|
hostcache=0
|
||||||
copykeyring=true
|
copykeyring=1
|
||||||
copymirrorlist=true
|
copymirrorlist=1
|
||||||
directory=false
|
|
||||||
interactive=false
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "usage: ${0##*/} [options] root [packages...]"
|
echo "usage: ${0##*/} [options] root [packages...]"
|
||||||
@@ -72,10 +70,10 @@ opts=':C:cGiM'
|
|||||||
while getopts ${opts} arg; do
|
while getopts ${opts} arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
C) pacman_conf=$OPTARG ;;
|
C) pacman_conf=$OPTARG ;;
|
||||||
c) hostcache=true ;;
|
c) hostcache=1 ;;
|
||||||
i) interactive=true ;;
|
i) interactive=1 ;;
|
||||||
G) copykeyring=false ;;
|
G) copykeyring=0 ;;
|
||||||
M) copymirrorlist=false ;;
|
M) copymirrorlist=0 ;;
|
||||||
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
|
:) echo "invalid argument ${arg}:$OPTARG"; usage 1;;
|
||||||
?) usage 0 ;;
|
?) usage 0 ;;
|
||||||
esac
|
esac
|
||||||
@@ -88,9 +86,13 @@ check_root
|
|||||||
newroot=$1; shift
|
newroot=$1; shift
|
||||||
pacman_args=("${@:-base}")
|
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")
|
[[ -n $pacman_conf ]] && pacman_args+=(--config="$pacman_conf")
|
||||||
|
|
||||||
@@ -102,15 +104,16 @@ create_min_fs "$newroot"
|
|||||||
# mount API filesystems
|
# mount API filesystems
|
||||||
chroot_api_mount "$newroot" || die "failed to setup API filesystems in new root"
|
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"
|
msg2 'Installing packages to %s' "$newroot"
|
||||||
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
|
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then
|
||||||
die 'Failed to install packages to new root'
|
die 'Failed to install packages to new root'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ${copykeyring};then
|
|
||||||
copy_keyring "$newroot"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ${copymirrorlist};then
|
if (( copymirrorlist ));then
|
||||||
copy_mirrorlist "$newroot"
|
copy_mirrorlist "$newroot"
|
||||||
fi
|
fi
|
||||||
|
@@ -16,9 +16,12 @@ chroot_version=0.9
|
|||||||
|
|
||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
|
# umask might have been changed in /etc/profile
|
||||||
|
# ensure that sane default is set again
|
||||||
|
umask 0022
|
||||||
|
|
||||||
working_dir=''
|
working_dir=''
|
||||||
files=()
|
files=()
|
||||||
nosetarch=false
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
|
echo "Usage: ${0##*/} [options] working-dir [run arguments]"
|
||||||
@@ -45,9 +48,9 @@ while getopts ${opts} arg; do
|
|||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
C) pacman_conf="$OPTARG" ;;
|
C) pacman_conf="$OPTARG" ;;
|
||||||
M) makepkg_conf="$OPTARG" ;;
|
M) makepkg_conf="$OPTARG" ;;
|
||||||
c) cache_dir="$OPTARG" ;;
|
c) cache_dirs+=("$OPTARG") ;;
|
||||||
f) files+=("$OPTARG") ;;
|
f) files+=("$OPTARG") ;;
|
||||||
s) nosetarch=true ;;
|
s) nosetarch=1 ;;
|
||||||
r) bindmounts_ro=("$OPTARG") ;;
|
r) bindmounts_ro=("$OPTARG") ;;
|
||||||
w) bindmounts_rw=("$OPTARG") ;;
|
w) bindmounts_rw=("$OPTARG") ;;
|
||||||
h|?) usage ;;
|
h|?) usage ;;
|
||||||
@@ -65,20 +68,33 @@ shift 1
|
|||||||
|
|
||||||
[[ -z $working_dir ]] && die 'Please specify a working directory.'
|
[[ -z $working_dir ]] && die 'Please specify a working directory.'
|
||||||
|
|
||||||
if [[ -z $cache_dir ]]; then
|
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
|
||||||
cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
|
|
||||||
else
|
if (( ${#cache_dirs[@]} == 0 )); then
|
||||||
cache_dirs=("$cache_dir")
|
mapfile -t cache_dirs < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" CacheDir)
|
||||||
fi
|
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#'))
|
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 () {
|
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"
|
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
|
||||||
|
|
||||||
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
||||||
|
|
||||||
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
|
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
|
||||||
@@ -95,8 +111,11 @@ copy_hostconf () {
|
|||||||
chroot_extra_mount() {
|
chroot_extra_mount() {
|
||||||
chroot_add_resolv_conf "$1"
|
chroot_add_resolv_conf "$1"
|
||||||
chroot_mount "/etc/hosts" "$1/etc/hosts" -B
|
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
|
chroot_mount "${cache_dirs[0]}" "$1${cache_dirs[0]}" -B
|
||||||
|
if [[ -e /etc/localtime ]];then
|
||||||
|
[[ -e $1/etc/localtime ]] || touch $1/etc/localtime
|
||||||
|
chroot_mount "/etc/localtime" "$1/etc/localtime" -B
|
||||||
|
fi
|
||||||
|
|
||||||
for cache_dir in ${cache_dirs[@]:1}; do
|
for cache_dir in ${cache_dirs[@]:1}; do
|
||||||
chroot_mount "$cache_dir" "$1${cache_dir}" -Br
|
chroot_mount "$cache_dir" "$1${cache_dir}" -Br
|
||||||
@@ -109,7 +128,7 @@ chroot_extra_mount() {
|
|||||||
for m in ${bindmounts_rw[@]}; do
|
for m in ${bindmounts_rw[@]}; do
|
||||||
chroot_mount "${m%%:*}" "$1${m##*:}" -B
|
chroot_mount "${m%%:*}" "$1${m##*:}" -B
|
||||||
done
|
done
|
||||||
|
|
||||||
for host_mirror in "${host_mirrors[@]}"; do
|
for host_mirror in "${host_mirrors[@]}"; do
|
||||||
if [[ $host_mirror == *file://* ]]; then
|
if [[ $host_mirror == *file://* ]]; then
|
||||||
host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
|
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")
|
eval $(grep '^CARCH=' "$working_dir/etc/makepkg.conf")
|
||||||
|
|
||||||
${nosetarch} && unset CARCH
|
[[ -z $nosetarch ]] || unset CARCH
|
||||||
|
|
||||||
${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@"
|
${CARCH:+setarch "$CARCH"} chroot "${working_dir}" "$@"
|
||||||
|
|
||||||
|
@@ -215,7 +215,7 @@ done
|
|||||||
[[ $device = *'\040(deleted)' ]] && continue
|
[[ $device = *'\040(deleted)' ]] && continue
|
||||||
|
|
||||||
if [[ $type = file ]]; then
|
if [[ $type = file ]]; then
|
||||||
printf '%-20s' "$device"
|
printf '%-20s' "${device#${root%/}}"
|
||||||
elif [[ $device = /dev/dm-+([0-9]) ]]; then
|
elif [[ $device = /dev/dm-+([0-9]) ]]; then
|
||||||
# device mapper doesn't allow characters we need to worry
|
# device mapper doesn't allow characters we need to worry
|
||||||
# about being mangled, and it does the escaping of dashes
|
# about being mangled, and it does the escaping of dashes
|
||||||
|
@@ -15,11 +15,9 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
working_dir=''
|
working_dir=''
|
||||||
files=()
|
|
||||||
|
|
||||||
nosetarch=false
|
files=()
|
||||||
copy_mirrorlist=true
|
chroot_args=()
|
||||||
basestrap_args=(-Gc)
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] working-dir package-list..."
|
echo "Usage: ${0##*/} [options] working-dir package-list..."
|
||||||
@@ -28,7 +26,6 @@ usage() {
|
|||||||
echo ' -M <file> Location of a makepkg config file'
|
echo ' -M <file> Location of a makepkg config file'
|
||||||
echo ' -c <dir> Set pacman cache'
|
echo ' -c <dir> Set pacman cache'
|
||||||
echo ' -f <file> Copy file from the host to the chroot'
|
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 ' -s Do not run setarch'
|
||||||
echo ' -h This message'
|
echo ' -h This message'
|
||||||
exit 1
|
exit 1
|
||||||
@@ -36,7 +33,7 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='hC:M:c:f:sm'
|
opts='hC:M:c:f:s'
|
||||||
|
|
||||||
while getopts ${opts} arg; do
|
while getopts ${opts} arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -44,11 +41,12 @@ while getopts ${opts} arg; do
|
|||||||
M) makepkg_conf="$OPTARG" ;;
|
M) makepkg_conf="$OPTARG" ;;
|
||||||
c) cache_dir="$OPTARG" ;;
|
c) cache_dir="$OPTARG" ;;
|
||||||
f) files+=("$OPTARG") ;;
|
f) files+=("$OPTARG") ;;
|
||||||
s) nosetarch=true ;;
|
s) nosetarch=1 ;;
|
||||||
m) copy_mirrorlist=false; basestrap_args+=(-M) ;;
|
|
||||||
h|?) usage ;;
|
h|?) usage ;;
|
||||||
*) error "invalid argument '%s'" "$arg"; usage ;;
|
*) error "invalid argument '%s'" "$arg"; usage ;;
|
||||||
esac
|
esac
|
||||||
|
chroot_args+=("-$arg")
|
||||||
|
[[ -v OPTARG ]] && chroot_args+=("$OPTARG")
|
||||||
done
|
done
|
||||||
shift $(($OPTIND - 1))
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
@@ -61,10 +59,10 @@ shift 1
|
|||||||
|
|
||||||
[[ -z $working_dir ]] && die 'Please specify a working directory.'
|
[[ -z $working_dir ]] && die 'Please specify a working directory.'
|
||||||
|
|
||||||
if [[ -z $cache_dir ]]; then
|
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
|
||||||
cache_dirs=($(pacman -v $cache_conf 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g'))
|
|
||||||
else
|
if (( ${#cache_dirs[@]} == 0 )); then
|
||||||
cache_dirs=(${cache_dir})
|
mapfile -t cache_dirs < <($pacconf_cmd CacheDir)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
umask 0022
|
umask 0022
|
||||||
@@ -90,26 +88,15 @@ for f in "${files[@]}"; do
|
|||||||
cp "$f" "$working_dir$f"
|
cp "$f" "$working_dir$f"
|
||||||
done
|
done
|
||||||
|
|
||||||
_env=()
|
basestrap -Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \
|
||||||
while read -r varname; do
|
${cache_dirs[@]/#/--cachedir=} "$@" || die 'Failed to install all packages'
|
||||||
_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'
|
|
||||||
|
|
||||||
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"
|
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 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf"
|
||||||
|
echo "${CHROOTVERSION}" > "$working_dir/.artools"
|
||||||
|
|
||||||
dbus-uuidgen --ensure="$working_dir"/etc/machine-id
|
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 \
|
exec chroot-run \
|
||||||
"${chroot_args[@]}" \
|
"${chroot_args[@]}" \
|
||||||
"$working_dir" locale-gen
|
"$working_dir" locale-gen
|
||||||
|
@@ -15,6 +15,21 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
. @libdir@/artools/util-iso.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(){
|
prepare_build(){
|
||||||
timer_start=$(get_timer)
|
timer_start=$(get_timer)
|
||||||
|
|
||||||
@@ -33,7 +48,7 @@ prepare_build(){
|
|||||||
|
|
||||||
iso_label="ARTIX_$(date +%Y%m)"
|
iso_label="ARTIX_$(date +%Y%m)"
|
||||||
|
|
||||||
mkchroot_args+=(-C ${pacman_conf} -m)
|
basestrap_args+=(-C ${pacman_conf})
|
||||||
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH}
|
work_dir=${CHROOTS_ISO}/${PROFILE}/${ARCH}
|
||||||
|
|
||||||
iso_dir="${ISO_POOL}/${PROFILE}"
|
iso_dir="${ISO_POOL}/${PROFILE}"
|
||||||
@@ -73,7 +88,9 @@ build(){
|
|||||||
lock_close 9
|
lock_close 9
|
||||||
|
|
||||||
rm -rf --one-file-system "${work_dir}"
|
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
|
fi
|
||||||
|
|
||||||
if ${iso_only}; then
|
if ${iso_only}; then
|
||||||
@@ -101,10 +118,9 @@ clean_first=true
|
|||||||
pretend=false
|
pretend=false
|
||||||
images_only=false
|
images_only=false
|
||||||
iso_only=false
|
iso_only=false
|
||||||
log=false
|
|
||||||
persist=false
|
persist=false
|
||||||
|
|
||||||
mkchroot_args=()
|
basestrap_args=(-GMc)
|
||||||
cmd=${0##*/}
|
cmd=${0##*/}
|
||||||
|
|
||||||
REPOSITORY=${cmd##*-}
|
REPOSITORY=${cmd##*-}
|
||||||
@@ -125,7 +141,6 @@ usage() {
|
|||||||
echo ' -x Build images only'
|
echo ' -x Build images only'
|
||||||
echo ' -z Generate iso only'
|
echo ' -z Generate iso only'
|
||||||
echo ' Requires pre built images (-x)'
|
echo ' Requires pre built images (-x)'
|
||||||
echo ' -l Log to file'
|
|
||||||
echo ' -q Query settings and pretend build'
|
echo ' -q Query settings and pretend build'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
@@ -135,7 +150,7 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='p:r:t:i:g:czxmlqh'
|
opts='p:r:t:i:g:czxmqh'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -148,7 +163,6 @@ while getopts "${opts}" arg; do
|
|||||||
x) images_only=true ;;
|
x) images_only=true ;;
|
||||||
z) iso_only=true ;;
|
z) iso_only=true ;;
|
||||||
m) persist=true ;;
|
m) persist=true ;;
|
||||||
l) log=true ;;
|
|
||||||
q) pretend=true ;;
|
q) pretend=true ;;
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||||
|
@@ -94,7 +94,7 @@ else
|
|||||||
-C "${pacman_conf}" \
|
-C "${pacman_conf}" \
|
||||||
-M "${makepkg_conf}" \
|
-M "${makepkg_conf}" \
|
||||||
"${CHROOTS_PKG}/${repo}-${ARCH}/root" \
|
"${CHROOTS_PKG}/${repo}-${ARCH}/root" \
|
||||||
pacman -Syu --noconfirm || abort
|
pacman -Syuu --noconfirm || abort
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Always build official packages reproducibly
|
# Always build official packages reproducibly
|
||||||
|
@@ -29,8 +29,9 @@ pull_tree_arch(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
pull_tree_artix(){
|
pull_tree_artix(){
|
||||||
|
local repos=("$1")
|
||||||
cd ${TREE_DIR_ARTIX}
|
cd ${TREE_DIR_ARTIX}
|
||||||
for tree in ${TREE_NAMES_ARTIX[@]};do
|
for tree in ${repos[@]};do
|
||||||
if [[ -d ${tree} ]];then
|
if [[ -d ${tree} ]];then
|
||||||
config_tree "${tree}"
|
config_tree "${tree}"
|
||||||
cd ${tree}
|
cd ${tree}
|
||||||
@@ -123,7 +124,13 @@ view_build(){
|
|||||||
|
|
||||||
sync_repos(){
|
sync_repos(){
|
||||||
${sync_arch} && pull_tree_arch
|
${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
|
load_user_info
|
||||||
@@ -141,6 +148,7 @@ createnew=false
|
|||||||
conf=false
|
conf=false
|
||||||
unstable=false
|
unstable=false
|
||||||
staging=true
|
staging=true
|
||||||
|
sync_group=false
|
||||||
|
|
||||||
PACKAGE=''
|
PACKAGE=''
|
||||||
|
|
||||||
@@ -152,7 +160,7 @@ usage() {
|
|||||||
echo ' -p <pkg> Package name'
|
echo ' -p <pkg> Package name'
|
||||||
echo ' -t <team> Team name (only with -n)'
|
echo ' -t <team> Team name (only with -n)'
|
||||||
echo " [default: ${TEAM}]"
|
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 " [default: ${GROUP}]"
|
||||||
echo " -s Clone or pull repos"
|
echo " -s Clone or pull repos"
|
||||||
echo " -z Don't clone or pull arch repos"
|
echo " -z Don't clone or pull arch repos"
|
||||||
@@ -176,7 +184,7 @@ while getopts "${opts}" arg; do
|
|||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
p) PACKAGE="$OPTARG" ;;
|
p) PACKAGE="$OPTARG" ;;
|
||||||
t) TEAM="$OPTARG" ;;
|
t) TEAM="$OPTARG" ;;
|
||||||
g) GROUP="$OPTARG" ;;
|
g) GROUP="$OPTARG"; sync_group=true ;;
|
||||||
s) sync=true ;;
|
s) sync=true ;;
|
||||||
z) sync_arch=false ;;
|
z) sync_arch=false ;;
|
||||||
y) sync_artix=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
|
case $artixrepo in
|
||||||
*testing*|*staging*)
|
*testing*|*staging*)
|
||||||
if $repomatch;then
|
if $repomatch;then
|
||||||
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
else
|
else
|
||||||
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -61,14 +61,14 @@ compare(){
|
|||||||
elif ${upgrades};then
|
elif ${upgrades};then
|
||||||
|
|
||||||
if [ $result -eq -1 ];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
|
fi
|
||||||
|
|
||||||
elif ${downgrades};then
|
elif ${downgrades};then
|
||||||
|
|
||||||
if [ $result -eq 1 ];then
|
if [ $result -eq 1 ];then
|
||||||
if [[ -n $archver ]] && [[ -n $archrepo ]];then
|
if [[ -n $archver ]] && [[ -n $archrepo ]];then
|
||||||
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "$group"
|
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -198,8 +198,8 @@ artix_repos=(
|
|||||||
'gnome-wobble' 'kde-wobble'
|
'gnome-wobble' 'kde-wobble'
|
||||||
)
|
)
|
||||||
|
|
||||||
readonly table="%-20s %-20s %-25s %-25s %-25s %-20s"
|
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
|
||||||
readonly table2="%-20s %-35s %-20s %-10s"
|
readonly table2="%-20s %-35s %-30s %-10s"
|
||||||
readonly table3="%-20s %-45s %s"
|
readonly table3="%-20s %-45s %s"
|
||||||
|
|
||||||
searchrepos=(${artix_repos[@]})
|
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
|
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() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
|
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
|
||||||
echo ' Run this script in a PKGBUILD dir to build a package inside a'
|
echo ' Run this script in a PKGBUILD dir to build a package inside a'
|
||||||
@@ -118,11 +141,7 @@ delete_chroot() {
|
|||||||
stat_done
|
stat_done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: install_packages $copydir $pkgs...
|
|
||||||
install_packages() {
|
install_packages() {
|
||||||
local copydir=$1
|
|
||||||
local install_pkgs=("${@:2}")
|
|
||||||
|
|
||||||
local -a pkgnames
|
local -a pkgnames
|
||||||
local ret
|
local ret
|
||||||
|
|
||||||
@@ -133,28 +152,19 @@ install_packages() {
|
|||||||
-r "${bindmounts_ro[@]}" \
|
-r "${bindmounts_ro[@]}" \
|
||||||
-r "${bindmounts_rw[@]}" \
|
-r "${bindmounts_rw[@]}" \
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
pacman -U --noconfirm -- "${pkgnames[@]/#//root/}"
|
bash -c 'yes y | pacman -U -- "$@"' -bash "${pkgnames[@]/#//root/}"
|
||||||
ret=$?
|
ret=$?
|
||||||
rm -- "${pkgnames[@]/#/$copydir/root/}"
|
rm -- "${pkgnames[@]/#/$copydir/root/}"
|
||||||
|
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: prepare_chroot $copydir $HOME $keepbuilddir $run_namcap
|
|
||||||
# Globals:
|
|
||||||
# - MAKEFLAGS
|
|
||||||
# - PACKAGER
|
|
||||||
prepare_chroot() {
|
prepare_chroot() {
|
||||||
local copydir=$1
|
(( keepbuilddir )) || rm -rf "$copydir/build"
|
||||||
local USER_HOME=$2
|
|
||||||
local keepbuilddir=$3
|
|
||||||
local run_namcap=$4
|
|
||||||
|
|
||||||
[[ $keepbuilddir = true ]] || rm -rf "$copydir/build"
|
|
||||||
|
|
||||||
local builduser_uid builduser_gid
|
local builduser_uid builduser_gid
|
||||||
builduser_uid="${SUDO_UID:-$UID}"
|
builduser_uid="$(id -u "$makepkg_user")"
|
||||||
builduser_gid="$(id -g "$builduser_uid")"
|
builduser_gid="$(id -g "$makepkg_user")"
|
||||||
local install="install -o $builduser_uid -g $builduser_gid"
|
local install="install -o $builduser_uid -g $builduser_gid"
|
||||||
local x
|
local x
|
||||||
|
|
||||||
@@ -189,7 +199,7 @@ EOF
|
|||||||
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
|
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
|
||||||
printf '_chrootbuild "$@" || exit\n'
|
printf '_chrootbuild "$@" || exit\n'
|
||||||
|
|
||||||
if [[ $run_namcap = true ]]; then
|
if (( run_namcap )); then
|
||||||
declare -f _chrootnamcap
|
declare -f _chrootnamcap
|
||||||
printf '_chrootnamcap || exit\n'
|
printf '_chrootnamcap || exit\n'
|
||||||
fi
|
fi
|
||||||
@@ -215,8 +225,14 @@ _chrootbuild() {
|
|||||||
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
|
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
|
||||||
ret=$?
|
ret=$?
|
||||||
case $ret in
|
case $ret in
|
||||||
0|14)
|
0)
|
||||||
return 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;;
|
return $ret;;
|
||||||
esac
|
esac
|
||||||
@@ -230,39 +246,21 @@ _chrootnamcap() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: download_sources $copydir $makepkg_user
|
|
||||||
# Globals:
|
|
||||||
# - SRCDEST
|
|
||||||
download_sources() {
|
download_sources() {
|
||||||
local copydir=$1
|
|
||||||
local makepkg_user=$2
|
|
||||||
|
|
||||||
# local builddir
|
|
||||||
# builddir="$(mktemp -d)"
|
|
||||||
# chown "$makepkg_user:" "$builddir"
|
|
||||||
|
|
||||||
setup_workdir
|
setup_workdir
|
||||||
chown "$makepkg_user:" "$WORKDIR"
|
chown "$makepkg_user:" "$WORKDIR"
|
||||||
|
|
||||||
# Ensure sources are downloaded
|
# Ensure sources are downloaded
|
||||||
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \
|
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \
|
||||||
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
|
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."
|
die "Could not download sources."
|
||||||
|
|
||||||
# Clean up garbage from verifysource
|
# Clean up garbage from verifysource
|
||||||
# rm -rf "$builddir"
|
# rm -rf "$builddir"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: move_products $copydir $owner
|
|
||||||
# Globals:
|
|
||||||
# - PKGDEST
|
|
||||||
# - LOGDEST
|
|
||||||
# - SRCPKGDEST
|
|
||||||
move_products() {
|
move_products() {
|
||||||
local copydir=$1
|
|
||||||
local src_owner=$2
|
|
||||||
|
|
||||||
local pkgfile
|
local pkgfile
|
||||||
for pkgfile in "$copydir"/pkgdest/*; do
|
for pkgfile in "$copydir"/pkgdest/*; do
|
||||||
chown "$src_owner" "$pkgfile"
|
chown "$src_owner" "$pkgfile"
|
||||||
@@ -295,142 +293,118 @@ move_products() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
main() {
|
opts='hcur:I:l:nTD:d:U:'
|
||||||
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
|
|
||||||
|
|
||||||
bindmounts_ro=()
|
while getopts "${opts}" arg; do
|
||||||
bindmounts_rw=()
|
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
|
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
|
||||||
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
|
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
||||||
[[ -z "$copy" || $copy = root ]] && copy=copy
|
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
||||||
src_owner=${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
|
# Canonicalize chrootdir, getting rid of trailing /
|
||||||
case "$arg" in
|
chrootdir=$(readlink -e "$passeddir")
|
||||||
c) clean_first=true ;;
|
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
|
||||||
D) bindmounts_ro+=("$OPTARG") ;;
|
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
|
||||||
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
|
|
||||||
|
|
||||||
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
|
if [[ ${copy:0:1} = / ]]; then
|
||||||
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
copydir=$copy
|
||||||
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
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 /
|
# See if -R or -e was passed to makepkg
|
||||||
chrootdir=$(readlink -e "$passeddir")
|
for arg in "${@:$OPTIND}"; do
|
||||||
[[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path '%s'" "$passeddir"
|
case ${arg%%=*} in
|
||||||
[[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory. Try using: mkchroot %s/root base-devel" "$chrootdir"
|
--skip*|--holdver) verifysource_args+=("$arg") ;;
|
||||||
|
--repackage|--noextract) keepbuilddir=1 ;;
|
||||||
|
--*) ;;
|
||||||
|
-*R*|-*e*) keepbuilddir=1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
if [[ ${copy:0:1} = / ]]; then
|
load_user_info
|
||||||
copydir=$copy
|
|
||||||
else
|
|
||||||
copydir="$chrootdir/$copy"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Pass all arguments after -- right to makepkg
|
umask 0022
|
||||||
makepkg_args+=("${@:$OPTIND}")
|
|
||||||
|
|
||||||
# See if -R or -e was passed to makepkg
|
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
|
||||||
for arg in "${makepkg_args[@]}"; do
|
load_vars /etc/makepkg.conf
|
||||||
case ${arg%%=*} in
|
|
||||||
--repackage|--noextract) keepbuilddir=true; break ;;
|
|
||||||
--repackage|--noextract) keepbuilddir=true; break ;;
|
|
||||||
--*) ;;
|
|
||||||
-*R*|-*e*) keepbuilddir=true; break ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
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"
|
if [[ ! -d $copydir ]] || (( clean_first )); then
|
||||||
load_vars /etc/makepkg.conf
|
sync_chroot "$chrootdir/root" "$copydir" "$copy"
|
||||||
|
fi
|
||||||
|
|
||||||
# Use PKGBUILD directory if these don't exist
|
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
|
||||||
[[ -d $PKGDEST ]] || PKGDEST=$PWD
|
|
||||||
[[ -d $SRCDEST ]] || SRCDEST=$PWD
|
|
||||||
[[ -d $SRCPKGDEST ]] || SRCPKGDEST=$PWD
|
|
||||||
[[ -d $LOGDEST ]] || LOGDEST=$PWD
|
|
||||||
|
|
||||||
# Lock the chroot we want to use. We'll keep this lock until we exit.
|
(( update_first )) && chroot-run \
|
||||||
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 \
|
|
||||||
-r "${bindmounts_ro[*]}" \
|
-r "${bindmounts_ro[*]}" \
|
||||||
-w "${bindmounts_rw[*]}" \
|
-w "${bindmounts_rw[*]}" \
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
/chrootbuild "${makepkg_args[@]}"
|
pacman -Syuu --noconfirm
|
||||||
then
|
|
||||||
move_products "$copydir" "$src_owner"
|
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
|
else
|
||||||
(( ret += 1 ))
|
die "Build failed, check %s/build" "$copydir"
|
||||||
fi
|
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
|
# gitea user access token
|
||||||
# GIT_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
|
# TREE_DIR_ARTIX=${WORKSPACE_DIR}/artixlinux
|
||||||
|
|
||||||
@@ -44,8 +44,6 @@
|
|||||||
|
|
||||||
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
|
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
|
||||||
|
|
||||||
# TREE_NAMES_ARCH=(packages community)
|
|
||||||
|
|
||||||
# default repos root
|
# default repos root
|
||||||
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
||||||
|
|
||||||
|
@@ -162,7 +162,7 @@ artix_mount_handler() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${checksum}" == "y" ]]; then
|
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}.sfs" ]]; then
|
||||||
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then
|
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sha512" ]]; then
|
||||||
msg -n ":: Self-test requested, please wait..."
|
msg -n ":: Self-test requested, please wait..."
|
||||||
@@ -182,7 +182,7 @@ artix_mount_handler() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${verify}" == "y" ]]; then
|
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" ]]; then
|
||||||
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then
|
if [[ -f "/run/artix/bootmnt/${artixbasedir}/${arch}/${fs}.sfs.sig" ]]; then
|
||||||
msg -n ":: Signature verification requested, please wait..."
|
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 dest_sfs="/run/artix/sfs" dest_img="/run/artix/img"
|
||||||
local lower_dir
|
local lower_dir
|
||||||
|
|
||||||
for sfs in livefs desktopfs rootfs;do
|
for sfs in livefs rootfs;do
|
||||||
if [[ -f "${src}/${sfs}.sfs" ]]; then
|
if [[ -f "${src}/${sfs}.sfs" ]]; then
|
||||||
_mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}"
|
_mnt_sfs "${src}/${sfs}.sfs" "${dest_sfs}/${sfs}"
|
||||||
if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then
|
if [[ -f "${dest_sfs}/${sfs}/${sfs}.img" ]]; then
|
||||||
|
@@ -40,7 +40,7 @@ artix_pxe_http_mount_handler () {
|
|||||||
|
|
||||||
local _src=${artix_http_srv}${artixbasedir}/${arch}
|
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
|
if [[ ! -z "$( curl -s --head "${_src}/${sfs}.sfs" | grep "OK" )" ]]; then
|
||||||
_curl_get "${_src}/${sfs}.sfs" "/${arch}"
|
_curl_get "${_src}/${sfs}.sfs" "/${arch}"
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@ load_vars() {
|
|||||||
[[ -f $1 ]] || return 1
|
[[ -f $1 ]] || return 1
|
||||||
|
|
||||||
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER CARCH GPGKEY; do
|
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
|
done
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@@ -159,15 +159,6 @@ load_config(){
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
user_own(){
|
|
||||||
local flag=$2
|
|
||||||
chown ${flag} "${OWNER}:$(id --group ${OWNER})" "$1"
|
|
||||||
}
|
|
||||||
|
|
||||||
user_run(){
|
|
||||||
su ${OWNER} -c "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
load_user_info(){
|
load_user_info(){
|
||||||
OWNER=${SUDO_USER:-$USER}
|
OWNER=${SUDO_USER:-$USER}
|
||||||
|
|
||||||
|
@@ -153,7 +153,7 @@ configure_calamares(){
|
|||||||
msg2 "Configuring Calamares"
|
msg2 "Configuring Calamares"
|
||||||
write_users_conf > "$mods"/users.conf
|
write_users_conf > "$mods"/users.conf
|
||||||
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
|
write_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|openrc|${INITSYS}|" -i "$mods"/postcfg.conf
|
||||||
sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf
|
sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf
|
||||||
fi
|
fi
|
||||||
|
@@ -29,11 +29,11 @@ prepare_initramfs(){
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n ${GPG_KEY} ]]; then
|
if [[ -n ${GPG_KEY} ]]; then
|
||||||
user_run "gpg --export ${GPG_KEY} >${USERCONFDIR}/artools/gpgkey"
|
su ${OWNER} -c "gpg --export ${GPG_KEY} >/tmp/GPG_KEY"
|
||||||
exec 17<>${USERCONFDIR}/artools/GPG_KEY
|
exec 17<>/tmp/GPG_KEY
|
||||||
fi
|
fi
|
||||||
local _kernel=$(cat $mnt/usr/lib/modules/*/version)
|
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} \
|
/usr/bin/mkinitcpio -k ${_kernel} \
|
||||||
-c /etc/mkinitcpio-artix.conf \
|
-c /etc/mkinitcpio-artix.conf \
|
||||||
-g /boot/initramfs.img
|
-g /boot/initramfs.img
|
||||||
@@ -41,8 +41,8 @@ prepare_initramfs(){
|
|||||||
if [[ -n ${GPG_KEY} ]]; then
|
if [[ -n ${GPG_KEY} ]]; then
|
||||||
exec 17<&-
|
exec 17<&-
|
||||||
fi
|
fi
|
||||||
if [[ -f ${USERCONFDIR}/artools/GPG_KEY ]]; then
|
if [[ -f /tmp/GPG_KEY ]]; then
|
||||||
rm ${USERCONFDIR}/artools/GPG_KEY
|
rm /tmp/GPG_KEY
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,8 +64,9 @@ configure_grub(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
prepare_grub(){
|
prepare_grub(){
|
||||||
local platform=i386-pc img='core.img' grub=$3/boot/grub efi=$3/efi/boot \
|
local platform=i386-pc img='core.img' prefix=/boot/grub
|
||||||
lib=$1/usr/lib/grub prefix=/boot/grub theme=$2/usr/share/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}
|
prepare_dir ${grub}/${platform}
|
||||||
|
|
||||||
|
@@ -12,33 +12,12 @@
|
|||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
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 () {
|
make_sig () {
|
||||||
local idir="$1" file="$2"
|
local idir="$1" file="$2"
|
||||||
msg2 "Creating signature file..."
|
msg2 "Creating signature file..."
|
||||||
cd "$idir"
|
cd "$idir"
|
||||||
user_own "$idir"
|
chown "${OWNER}:$(id --group ${OWNER})" "$idir"
|
||||||
user_run "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
|
su ${OWNER} -c "gpg --detach-sign --default-key ${GPG_KEY} $file.sfs"
|
||||||
chown -R root "$idir"
|
chown -R root "$idir"
|
||||||
cd ${OLDPWD}
|
cd ${OLDPWD}
|
||||||
}
|
}
|
||||||
|
@@ -39,21 +39,12 @@ track_fs() {
|
|||||||
|
|
||||||
mount_overlay(){
|
mount_overlay(){
|
||||||
FS_ACTIVE_MOUNTS=()
|
FS_ACTIVE_MOUNTS=()
|
||||||
local lower= upper="$1" work="$2" pkglist="$3"
|
local lower= upper="$1" work="$2"
|
||||||
local fs=${upper##*/}
|
|
||||||
local rootfs="$work/rootfs" desktopfs="$work/desktopfs" livefs="$work/livefs"
|
|
||||||
mkdir -p "${mnt_dir}/work"
|
mkdir -p "${mnt_dir}/work"
|
||||||
mkdir -p "$upper"
|
mkdir -p "$upper"
|
||||||
case $fs in
|
case $upper in
|
||||||
desktopfs) lower="$rootfs" ;;
|
*/livefs) lower="$work/rootfs" ;;
|
||||||
livefs)
|
*/bootfs) lower="$work/livefs":"$work/rootfs" ;;
|
||||||
lower="$rootfs"
|
|
||||||
[[ -f $pkglist ]] && lower="$desktopfs":"$rootfs"
|
|
||||||
;;
|
|
||||||
bootfs)
|
|
||||||
lower="$livefs":"$rootfs"
|
|
||||||
[[ -f $pkglist ]] && lower="$livefs":"$desktopfs":"$rootfs"
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
|
track_fs -t overlay overlay -olowerdir="$lower",upperdir="$upper",workdir="${mnt_dir}/work" "$upper"
|
||||||
}
|
}
|
||||||
|
@@ -23,9 +23,6 @@ init_profile(){
|
|||||||
[[ -f "$profdir/$prof/Packages-Root" ]] && ROOT_LIST="$profdir/$prof/Packages-Root"
|
[[ -f "$profdir/$prof/Packages-Root" ]] && ROOT_LIST="$profdir/$prof/Packages-Root"
|
||||||
[[ -d "$profdir/$prof/root-overlay" ]] && ROOT_OVERLAY="$profdir/$prof/root-overlay"
|
[[ -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"
|
[[ -f "$profdir/$prof/Packages-Live" ]] && LIVE_LIST="$profdir/$prof/Packages-Live"
|
||||||
[[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay"
|
[[ -d "$profdir/$prof/live-overlay" ]] && LIVE_OVERLAY="$profdir/$prof/live-overlay"
|
||||||
}
|
}
|
||||||
|
@@ -27,20 +27,6 @@ error_function() {
|
|||||||
exit 2
|
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() {
|
run_safe() {
|
||||||
local restoretrap func="$1"
|
local restoretrap func="$1"
|
||||||
set -e
|
set -e
|
||||||
@@ -48,11 +34,7 @@ run_safe() {
|
|||||||
restoretrap=$(trap -p ERR)
|
restoretrap=$(trap -p ERR)
|
||||||
trap 'error_function $func' ERR
|
trap 'error_function $func' ERR
|
||||||
|
|
||||||
if ${log};then
|
"$func"
|
||||||
run_log "$func"
|
|
||||||
else
|
|
||||||
"$func"
|
|
||||||
fi
|
|
||||||
|
|
||||||
eval $restoretrap
|
eval $restoretrap
|
||||||
set +E
|
set +E
|
||||||
@@ -96,12 +78,6 @@ make_iso() {
|
|||||||
msg "Done [Build ISO]"
|
msg "Done [Build ISO]"
|
||||||
}
|
}
|
||||||
|
|
||||||
install_packages(){
|
|
||||||
local fs="$1"
|
|
||||||
setarch "${ARCH}" mkchroot \
|
|
||||||
"${mkchroot_args[@]}" "${fs}" "${packages[@]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_overlay(){
|
copy_overlay(){
|
||||||
local src="$1" dest="$2"
|
local src="$1" dest="$2"
|
||||||
if [[ -e "$src" ]];then
|
if [[ -e "$src" ]];then
|
||||||
@@ -114,10 +90,6 @@ clean_up_image(){
|
|||||||
local path mnt="$1"
|
local path mnt="$1"
|
||||||
msg2 "Cleaning [%s]" "${mnt##*/}"
|
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
|
path=$mnt/boot
|
||||||
if [[ -d "$path" ]]; then
|
if [[ -d "$path" ]]; then
|
||||||
find "$path" -name 'initramfs*.img' -delete &> /dev/null
|
find "$path" -name 'initramfs*.img' -delete &> /dev/null
|
||||||
@@ -142,11 +114,6 @@ clean_up_image(){
|
|||||||
if [[ -d $path ]];then
|
if [[ -d $path ]];then
|
||||||
find "$path" -mindepth 1 -delete &> /dev/null
|
find "$path" -mindepth 1 -delete &> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${mnt##*/} == 'livefs' ]];then
|
|
||||||
rm -rf "$mnt/etc/pacman.d/gnupg"
|
|
||||||
fi
|
|
||||||
|
|
||||||
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
|
find "$mnt" -name *.pacnew -name *.pacsave -name *.pacorig -delete
|
||||||
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
|
if [[ -f "$mnt/boot/grub/grub.cfg" ]]; then
|
||||||
rm $mnt/boot/grub/grub.cfg
|
rm $mnt/boot/grub/grub.cfg
|
||||||
@@ -163,36 +130,18 @@ make_rootfs() {
|
|||||||
|
|
||||||
prepare_dir "${rootfs}"
|
prepare_dir "${rootfs}"
|
||||||
|
|
||||||
install_packages "${rootfs}"
|
basestrap "${basestrap_args[@]}" "${rootfs}" "${packages[@]}"
|
||||||
|
|
||||||
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
|
copy_overlay "${ROOT_OVERLAY}" "${rootfs}"
|
||||||
|
|
||||||
clean_up_image "${rootfs}"
|
clean_up_image "${rootfs}"
|
||||||
|
|
||||||
|
: > ${work_dir}/rootfs.lock
|
||||||
|
|
||||||
msg "Done [Base installation] (rootfs)"
|
msg "Done [Base installation] (rootfs)"
|
||||||
fi
|
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() {
|
make_livefs() {
|
||||||
if [[ ! -e ${work_dir}/livefs.lock ]]; then
|
if [[ ! -e ${work_dir}/livefs.lock ]]; then
|
||||||
msg "Prepare [Live installation] (livefs)"
|
msg "Prepare [Live installation] (livefs)"
|
||||||
@@ -200,9 +149,9 @@ make_livefs() {
|
|||||||
|
|
||||||
prepare_dir "${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}"
|
copy_overlay "${LIVE_OVERLAY}" "${livefs}"
|
||||||
|
|
||||||
@@ -212,6 +161,8 @@ make_livefs() {
|
|||||||
|
|
||||||
clean_up_image "${livefs}"
|
clean_up_image "${livefs}"
|
||||||
|
|
||||||
|
: > ${work_dir}/livefs.lock
|
||||||
|
|
||||||
msg "Done [Live installation] (livefs)"
|
msg "Done [Live installation] (livefs)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -227,7 +178,7 @@ make_bootfs() {
|
|||||||
|
|
||||||
local bootfs="${work_dir}/bootfs"
|
local bootfs="${work_dir}/bootfs"
|
||||||
|
|
||||||
mount_overlay "${bootfs}" "${work_dir}" "${DESKTOP_LIST}"
|
mount_overlay "${bootfs}" "${work_dir}"
|
||||||
|
|
||||||
prepare_initcpio "${bootfs}"
|
prepare_initcpio "${bootfs}"
|
||||||
prepare_initramfs "${bootfs}"
|
prepare_initramfs "${bootfs}"
|
||||||
@@ -259,7 +210,7 @@ make_grub(){
|
|||||||
compress_images(){
|
compress_images(){
|
||||||
local timer=$(get_timer)
|
local timer=$(get_timer)
|
||||||
run_safe "make_iso"
|
run_safe "make_iso"
|
||||||
user_own "${iso_dir}" "-R"
|
chown -R "${OWNER}:$(id --group ${OWNER})" "${iso_dir}"
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer}"
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,10 +218,6 @@ prepare_images(){
|
|||||||
local timer=$(get_timer)
|
local timer=$(get_timer)
|
||||||
load_pkgs "${ROOT_LIST}" "${INITSYS}"
|
load_pkgs "${ROOT_LIST}" "${INITSYS}"
|
||||||
run_safe "make_rootfs"
|
run_safe "make_rootfs"
|
||||||
if [[ -f "${DESKTOP_LIST}" ]] ; then
|
|
||||||
load_pkgs "${DESKTOP_LIST}" "${INITSYS}"
|
|
||||||
run_safe "make_desktopfs"
|
|
||||||
fi
|
|
||||||
if [[ -f ${LIVE_LIST} ]]; then
|
if [[ -f ${LIVE_LIST} ]]; then
|
||||||
load_pkgs "${LIVE_LIST}" "${INITSYS}"
|
load_pkgs "${LIVE_LIST}" "${INITSYS}"
|
||||||
run_safe "make_livefs"
|
run_safe "make_livefs"
|
||||||
|
Reference in New Issue
Block a user