forked from artix/artools
Compare commits
76 Commits
Author | SHA1 | Date | |
---|---|---|---|
6700e1a2e6 | |||
f874c8c399 | |||
1a5ea6c4ee | |||
486acaf47a | |||
d5ba8ed404 | |||
daf4c8283e | |||
7b65c27025 | |||
433a747da9 | |||
015c4f0658 | |||
b1dd485ec0 | |||
316514698e | |||
614d6e19c8 | |||
9c650134c4 | |||
b849cadbae | |||
f1067bcd60 | |||
3942dde012 | |||
30a6c61f52 | |||
d8195e2288 | |||
bfe9130cfb | |||
8873a71824 | |||
bb86a05f2f | |||
bd611c1af2 | |||
f4e8f703ea | |||
aa83bc79bb | |||
1bb9687ece
|
|||
48ced03735 | |||
0437e66091 | |||
9af6d02dea | |||
685992cca3 | |||
816e13895f | |||
6a3f48f181 | |||
b4d9195c03 | |||
0123e6d044 | |||
e2b2a21ed1 | |||
0e2e2875db | |||
a4d006adef | |||
98926fbdd0 | |||
a1a2289e18 | |||
057cbf1691 | |||
0b05cbeba1 | |||
ed5dad3066 | |||
76cce316a2 | |||
7c152b4f60 | |||
79c831c616 | |||
6b27c82b86 | |||
2cc5047dda | |||
08ab8c2137 | |||
9ddd962c2c | |||
a8c07bd7f3 | |||
1fcf78bb47 | |||
167265944d | |||
7ef931026e | |||
bef2a0b3fa | |||
8d6f12f5a9 | |||
bf6fc3fcff | |||
11c73f1086 | |||
62e4795000 | |||
2f92ba003b | |||
c19b80adbd | |||
1812296bc3 | |||
cfb3ced261 | |||
77c7d1db8e | |||
eb9f03c5c1 | |||
16d0c1759d | |||
922afb4e69 | |||
d22017e1a1 | |||
1ea7d2ca8b | |||
3cd8632c61 | |||
b425eac181 | |||
4b2d516258 | |||
defd0c7ad6 | |||
cf0cd1772e | |||
761ccf7644 | |||
5684aab444 | |||
df8d8fb4a0 | |||
be5fa4af09 |
14
Makefile
14
Makefile
@@ -1,6 +1,6 @@
|
|||||||
VERSION=0.12
|
VERSION=0.14
|
||||||
|
|
||||||
CHROOT_VERSION=0.9
|
CHROOT_VERSION=0.10
|
||||||
|
|
||||||
TOOLS = artools
|
TOOLS = artools
|
||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
@@ -34,11 +34,12 @@ PKG_BIN = \
|
|||||||
bin/pkg/deploypkg \
|
bin/pkg/deploypkg \
|
||||||
bin/pkg/commitpkg \
|
bin/pkg/commitpkg \
|
||||||
bin/pkg/comparepkg \
|
bin/pkg/comparepkg \
|
||||||
bin/pkg/checkpkg \
|
|
||||||
bin/pkg/mkchrootpkg \
|
bin/pkg/mkchrootpkg \
|
||||||
bin/pkg/pkg2yaml \
|
bin/pkg/pkg2yaml \
|
||||||
bin/pkg/buildtree \
|
bin/pkg/buildtree \
|
||||||
bin/pkg/lddd \
|
bin/pkg/lddd \
|
||||||
|
bin/pkg/links-add \
|
||||||
|
bin/pkg/checkpkg \
|
||||||
bin/pkg/finddeps \
|
bin/pkg/finddeps \
|
||||||
bin/pkg/find-libdeps
|
bin/pkg/find-libdeps
|
||||||
|
|
||||||
@@ -87,9 +88,6 @@ LN_DEPLOYPKG = \
|
|||||||
PKG_LIBS = \
|
PKG_LIBS = \
|
||||||
$(wildcard lib/pkg/*)
|
$(wildcard lib/pkg/*)
|
||||||
|
|
||||||
PKG_LISTS = \
|
|
||||||
$(wildcard data/pkglists/*.list)
|
|
||||||
|
|
||||||
PKG_UTIL = lib/util-pkg.sh
|
PKG_UTIL = lib/util-pkg.sh
|
||||||
|
|
||||||
PKG_DATA = \
|
PKG_DATA = \
|
||||||
@@ -171,6 +169,8 @@ install_pkg:
|
|||||||
|
|
||||||
$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides
|
$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides
|
||||||
|
|
||||||
|
$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove
|
||||||
|
|
||||||
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
|
for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done
|
||||||
for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done
|
for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done
|
||||||
for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done
|
for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done
|
||||||
@@ -185,8 +185,6 @@ install_pkg:
|
|||||||
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
|
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
|
||||||
install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
|
install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches
|
||||||
|
|
||||||
install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
|
|
||||||
install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists
|
|
||||||
install_cpio:
|
install_cpio:
|
||||||
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install
|
+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install
|
||||||
|
|
||||||
|
@@ -28,6 +28,7 @@ artools
|
|||||||
- pkg:
|
- pkg:
|
||||||
* namcap
|
* namcap
|
||||||
* git-subrepo
|
* git-subrepo
|
||||||
|
* jshon
|
||||||
|
|
||||||
- iso:
|
- iso:
|
||||||
* dosfstools
|
* dosfstools
|
||||||
|
@@ -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,14 +68,32 @@ 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
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
||||||
|
|
||||||
@@ -90,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
|
||||||
@@ -104,6 +128,13 @@ 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
|
||||||
|
if [[ $host_mirror == *file://* ]]; then
|
||||||
|
host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
|
||||||
|
chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
umask 0022
|
umask 0022
|
||||||
@@ -123,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 ;;
|
||||||
@@ -157,12 +171,12 @@ done
|
|||||||
|
|
||||||
shift $(($OPTIND - 1))
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
${pretend} && display_settings && exit 1
|
|
||||||
|
|
||||||
check_root
|
check_root
|
||||||
|
|
||||||
prepare_traps
|
prepare_traps
|
||||||
|
|
||||||
prepare_build
|
prepare_build
|
||||||
|
|
||||||
|
${pretend} && display_settings && exit 1
|
||||||
|
|
||||||
build
|
build
|
||||||
|
@@ -20,6 +20,7 @@ load_user_info
|
|||||||
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
|
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
|
||||||
|
|
||||||
create_first=false
|
create_first=false
|
||||||
|
rebuild=false
|
||||||
|
|
||||||
mkchrootpkg_args=(-c -n)
|
mkchrootpkg_args=(-c -n)
|
||||||
|
|
||||||
@@ -27,22 +28,11 @@ cmd=${0##*/}
|
|||||||
repo=${cmd#*-}
|
repo=${cmd#*-}
|
||||||
base_devel=('base-devel')
|
base_devel=('base-devel')
|
||||||
|
|
||||||
case ${repo} in
|
|
||||||
system|world|galaxy) repo='default' ;;
|
|
||||||
lib32*) base_devel+=('multilib-devel') ;;
|
|
||||||
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
pacman_conf="${DATADIR}/pacman-${repo}.conf"
|
|
||||||
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf"
|
|
||||||
|
|
||||||
makepkg_conf="${DATADIR}/makepkg.conf"
|
|
||||||
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf"
|
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
|
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
|
||||||
echo " -r <dir> Create chroots in this directory"
|
echo " -r <dir> Create chroots in this directory"
|
||||||
echo ' -c Recreate the chroot before building'
|
echo ' -c Recreate the chroot before building'
|
||||||
|
echo ' -m Major rebuild'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
|
echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}"
|
||||||
@@ -52,17 +42,34 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='hcr:'
|
opts='hcmr:'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
r) CHROOTS_PKG="$OPTARG" ;;
|
r) CHROOTS_PKG="$OPTARG" ;;
|
||||||
c) create_first=true ;;
|
c) create_first=true ;;
|
||||||
|
m) rebuild=true ;;
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
|
*) echo "invalid argument '%s'" "${arg}"; usage 1 ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if ${rebuild};then
|
||||||
|
repo='default'
|
||||||
|
else
|
||||||
|
case ${repo} in
|
||||||
|
system|world|galaxy) repo='default' ;;
|
||||||
|
lib32*) base_devel+=('multilib-devel') ;;
|
||||||
|
galaxy-gremlins|galaxy-goblins) repo=${repo#*-} ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
pacman_conf="${DATADIR}/pacman-${repo}.conf"
|
||||||
|
[[ -f ${USERCONFDIR}/artools/pacman-${repo}.conf ]] && pacman_conf="${USERCONFDIR}/artools/pacman-${repo}.conf"
|
||||||
|
|
||||||
|
makepkg_conf="${DATADIR}/makepkg.conf"
|
||||||
|
[[ -f ${USERCONFDIR}/artools/makepkg.conf ]] && makepkg_conf="${USERCONFDIR}/artools/makepkg.conf"
|
||||||
|
|
||||||
check_root SOURCE_DATE_EPOCH
|
check_root SOURCE_DATE_EPOCH
|
||||||
|
|
||||||
mkchrootpkg_args+=("${@:$OPTIND}")
|
mkchrootpkg_args+=("${@:$OPTIND}")
|
||||||
@@ -94,7 +101,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
|
||||||
|
@@ -20,21 +20,22 @@ pull_tree_arch(){
|
|||||||
for tree in ${TREE_NAMES_ARCH[@]};do
|
for tree in ${TREE_NAMES_ARCH[@]};do
|
||||||
if [[ -d ${tree} ]];then
|
if [[ -d ${tree} ]];then
|
||||||
cd ${tree}
|
cd ${tree}
|
||||||
pull_tree "${tree}"
|
pull_tree "${tree}" "$(get_local_head)" "Arch"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
clone_tree "${HOST_TREE_ARCH}" "${tree}"
|
clone_tree "${HOST_TREE_ARCH}" "${tree}" "Arch"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
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}
|
||||||
pull_tree "${tree}"
|
pull_tree "${tree}" "$(get_local_head)"
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
clone_tree "${HOST_TREE_ARTIX}" "${tree}"
|
clone_tree "${HOST_TREE_ARTIX}" "${tree}"
|
||||||
@@ -59,7 +60,7 @@ show_deps(){
|
|||||||
|
|
||||||
local archver=$(get_full_version $pkg)
|
local archver=$(get_full_version $pkg)
|
||||||
|
|
||||||
msg "repo: %s" "$repo"
|
msg2 "repo: %s" "$repo"
|
||||||
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
|
[[ -n ${pkgbase} ]] && msg2 "pkgbase: %s" "${pkgbase}"
|
||||||
msg2 "pkgname: %s" "${pkgname[*]}"
|
msg2 "pkgname: %s" "${pkgname[*]}"
|
||||||
[[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}"
|
[[ -n $pkgdesc ]] && msg2 "pkgdesc: %s" "${pkgdesc}"
|
||||||
@@ -78,7 +79,7 @@ from_arch(){
|
|||||||
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
|
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
|
||||||
|
|
||||||
local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
|
local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
|
||||||
local repo=$(find_repo "$package")
|
local repo=$(find_repo "$package" "${staging}" "${unstable}")
|
||||||
|
|
||||||
src=$package/repos/$repo
|
src=$package/repos/$repo
|
||||||
|
|
||||||
@@ -87,6 +88,7 @@ from_arch(){
|
|||||||
|
|
||||||
dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk
|
dest=${TREE_DIR_ARTIX}/$tree_dir/$pkg/trunk
|
||||||
|
|
||||||
|
msg "tree: %s" "$tree_dir"
|
||||||
show_deps "$src" "$repo"
|
show_deps "$src" "$repo"
|
||||||
|
|
||||||
if [[ -d $dest ]];then
|
if [[ -d $dest ]];then
|
||||||
@@ -113,7 +115,7 @@ view_build(){
|
|||||||
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
|
[[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg"
|
||||||
|
|
||||||
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
|
local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg
|
||||||
local repo=$(find_repo "$pkg_path")
|
local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}")
|
||||||
|
|
||||||
src=$pkg_path/repos/$repo
|
src=$pkg_path/repos/$repo
|
||||||
|
|
||||||
@@ -122,7 +124,13 @@ view_build(){
|
|||||||
|
|
||||||
sync_repos(){
|
sync_repos(){
|
||||||
${sync_arch} && pull_tree_arch
|
${sync_arch} && pull_tree_arch
|
||||||
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
|
||||||
@@ -133,27 +141,34 @@ load_vars /etc/makepkg.conf
|
|||||||
|
|
||||||
sync=false
|
sync=false
|
||||||
sync_arch=true
|
sync_arch=true
|
||||||
|
sync_artix=true
|
||||||
import=false
|
import=false
|
||||||
view=false
|
view=false
|
||||||
createnew=false
|
createnew=false
|
||||||
conf=false
|
conf=false
|
||||||
|
unstable=false
|
||||||
|
staging=true
|
||||||
|
sync_group=false
|
||||||
|
|
||||||
PACKAGE=''
|
PACKAGE=''
|
||||||
|
|
||||||
TEAM=${TREE_NAMES[0]}
|
TEAM=${TREE_NAMES_ARTIX[0]}
|
||||||
SUBORG=''
|
GROUP=${TREE_NAMES_ARTIX[0]}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options]"
|
echo "Usage: ${0##*/} [options]"
|
||||||
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 ' -o <org> Org of subrepo (only with -c)'
|
echo ' -g <group> Group name, the superrepo (only with -n or -s)'
|
||||||
|
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"
|
||||||
|
echo " -y Don't clone or pull artix repos"
|
||||||
echo ' -i Import a package from arch repos'
|
echo ' -i Import a package from arch repos'
|
||||||
echo ' -n Make new remote subrepo and clone it'
|
echo ' -n Make new remote subrepo and clone it'
|
||||||
echo ' -c Configure subrepo url'
|
echo ' -u Include kde & gnome unstable (only with -i)'
|
||||||
|
echo ' -w Exclude staging (only with -i)'
|
||||||
echo ' -v View package depends'
|
echo ' -v View package depends'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
@@ -163,19 +178,21 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='p:t:o:csinzvh'
|
opts='p:t:g:uwsinzyvh'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
p) PACKAGE="$OPTARG" ;;
|
p) PACKAGE="$OPTARG" ;;
|
||||||
t) TEAM="$OPTARG" ;;
|
t) TEAM="$OPTARG" ;;
|
||||||
o) SUBORG="$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 ;;
|
||||||
i) import=true ;;
|
i) import=true ;;
|
||||||
n) createnew=true ;;
|
n) createnew=true ;;
|
||||||
|
w) staging=false ;;
|
||||||
|
u) unstable=true ;;
|
||||||
v) view=true ;;
|
v) view=true ;;
|
||||||
c) conf=true ;;
|
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||||
esac
|
esac
|
||||||
@@ -192,6 +209,4 @@ ${view} && view_build "${PACKAGE}"
|
|||||||
|
|
||||||
${import} && from_arch "${PACKAGE}"
|
${import} && from_arch "${PACKAGE}"
|
||||||
|
|
||||||
${createnew} && subrepo_new "${PACKAGE}" "${TEAM}"
|
${createnew} && subrepo_new "${PACKAGE}" "${GROUP}" "${TEAM}"
|
||||||
|
|
||||||
${conf} && subrepo_config "${PACKAGE}" "${SUBORG}"
|
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
|
|
||||||
shopt -s extglob
|
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_user_info
|
||||||
|
|
||||||
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
|
load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf"
|
||||||
@@ -35,6 +41,8 @@ STARTDIR=$(pwd)
|
|||||||
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
|
TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX)
|
||||||
|
|
||||||
for _pkgname in "${pkgname[@]}"; do
|
for _pkgname in "${pkgname[@]}"; do
|
||||||
|
comparepkg=$_pkgname
|
||||||
|
pkgurl=
|
||||||
target_pkgver=$(get_full_version "$_pkgname")
|
target_pkgver=$(get_full_version "$_pkgname")
|
||||||
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
|
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
|
||||||
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
|
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
|
||||||
@@ -42,19 +50,29 @@ for _pkgname in "${pkgname[@]}"; do
|
|||||||
|
|
||||||
ln -s "$pkgfile" "$TEMPDIR"
|
ln -s "$pkgfile" "$TEMPDIR"
|
||||||
|
|
||||||
pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname")
|
if (( $# )); then
|
||||||
|
case $1 in
|
||||||
if [[ $? -ne 0 ]]; then
|
/*|*/*)
|
||||||
die "Couldn't download previous package for %s." "$_pkgname"
|
pkgurl=file://$(readlink -m "$1") ;;
|
||||||
|
*.pkg.tar*)
|
||||||
|
pkgurl=$1 ;;
|
||||||
|
'')
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
comparepkg=$1 ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
fi
|
fi
|
||||||
|
[[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") ||
|
||||||
|
die "Couldn't download previous package for %s." "$comparepkg"
|
||||||
|
|
||||||
oldpkg=${pkgurl##*://*/}
|
oldpkg=${pkgurl##*/}
|
||||||
|
|
||||||
if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then
|
if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then
|
||||||
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
|
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $pkgurl = file://* ]]; then
|
if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then
|
||||||
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
|
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
|
||||||
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
|
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
|
||||||
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"
|
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"
|
||||||
|
@@ -15,6 +15,22 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
get_path(){
|
||||||
|
local repo="$1" pkg=trunk/PKGBUILD
|
||||||
|
if [[ $repo != trunk ]]; then
|
||||||
|
[[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD
|
||||||
|
[[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD
|
||||||
|
fi
|
||||||
|
echo $pkg
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_commit(){
|
||||||
|
local dest="$1"
|
||||||
|
[[ -d repos/$dest ]] && git rm -r repos/$dest
|
||||||
|
[[ ! -d repos ]] && mkdir repos
|
||||||
|
[[ ! -d repos/$dest ]] && mkdir repos/$dest
|
||||||
|
}
|
||||||
|
|
||||||
commit_pkg(){
|
commit_pkg(){
|
||||||
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
|
local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}")
|
||||||
if [[ -n ${git_tree} ]];then
|
if [[ -n ${git_tree} ]];then
|
||||||
@@ -25,9 +41,13 @@ commit_pkg(){
|
|||||||
|
|
||||||
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
|
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
|
||||||
|
|
||||||
. trunk/PKGBUILD
|
local pkgbuild=$(get_path "${REPO_SRC}")
|
||||||
|
|
||||||
|
. $pkgbuild
|
||||||
[[ $arch == 'any' ]] && CARCH=any
|
[[ $arch == 'any' ]] && CARCH=any
|
||||||
local ver=$(get_full_version "${PACKAGE}")
|
|
||||||
|
local version=$(get_full_version)
|
||||||
|
|
||||||
local commit_msg=""
|
local commit_msg=""
|
||||||
|
|
||||||
if ${remove};then
|
if ${remove};then
|
||||||
@@ -36,14 +56,14 @@ commit_pkg(){
|
|||||||
local pkg=${PACKAGE}
|
local pkg=${PACKAGE}
|
||||||
git rm -r trunk
|
git rm -r trunk
|
||||||
else
|
else
|
||||||
local pkg="${PACKAGE}-$ver"
|
local pkg="${PACKAGE}-$version"
|
||||||
git rm -r repos/"${REPO_SRC}-$CARCH"
|
git rm -r repos/"${REPO_SRC}-$CARCH"
|
||||||
fi
|
fi
|
||||||
commit_msg="[${REPO_SRC}] '$pkg' ${action}"
|
commit_msg="[${REPO_SRC}] '$pkg' ${action}"
|
||||||
msg "Action: %s" "$commit_msg"
|
msg "Action: %s" "$commit_msg"
|
||||||
else
|
else
|
||||||
local action='modify'
|
local action='modify'
|
||||||
commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}"
|
commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}"
|
||||||
msg "Action: %s" "$commit_msg"
|
msg "Action: %s" "$commit_msg"
|
||||||
git add .
|
git add .
|
||||||
|
|
||||||
@@ -76,17 +96,18 @@ symlink_commit_pkg(){
|
|||||||
|
|
||||||
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
|
cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE}
|
||||||
|
|
||||||
. trunk/PKGBUILD
|
local pkgbuild=$(get_path "${REPO_SRC}")
|
||||||
|
|
||||||
|
. $pkgbuild
|
||||||
[[ $arch == 'any' ]] && CARCH=any
|
[[ $arch == 'any' ]] && CARCH=any
|
||||||
local ver=$(get_full_version "${PACKAGE}")
|
|
||||||
|
local version=$(get_full_version)
|
||||||
|
|
||||||
if [[ ${REPO_SRC} == 'trunk' ]];then
|
if [[ ${REPO_SRC} == 'trunk' ]];then
|
||||||
local action='add'
|
local action='add'
|
||||||
local dest="${REPO_DEST}-$CARCH"
|
local dest="${REPO_DEST}-$CARCH"
|
||||||
|
|
||||||
[[ -d repos/$dest ]] && git rm -r repos/$dest
|
prepare_commit "$dest"
|
||||||
[[ ! -d repos ]] && mkdir repos
|
|
||||||
[[ ! -d repos/$dest ]] && mkdir repos/$dest
|
|
||||||
|
|
||||||
cp trunk/* repos/$dest/
|
cp trunk/* repos/$dest/
|
||||||
else
|
else
|
||||||
@@ -94,14 +115,12 @@ symlink_commit_pkg(){
|
|||||||
local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH"
|
local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH"
|
||||||
|
|
||||||
[[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD"
|
[[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD"
|
||||||
[[ -d repos/$dest ]] && git rm -r repos/$dest
|
prepare_commit "$dest"
|
||||||
[[ ! -d repos ]] && mkdir repos
|
|
||||||
[[ ! -d repos/$dest ]] && mkdir repos/$dest
|
|
||||||
|
|
||||||
cp repos/$src/* repos/$dest/
|
cp repos/$src/* repos/$dest/
|
||||||
git rm -r repos/$src
|
git rm -r repos/$src
|
||||||
fi
|
fi
|
||||||
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$ver' ${action}"
|
local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}"
|
||||||
msg "Action: %s" "$commit_msg"
|
msg "Action: %s" "$commit_msg"
|
||||||
|
|
||||||
git add .
|
git add .
|
||||||
|
@@ -15,73 +15,162 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
compare(){
|
||||||
|
local pkgpath="$1" group="$2"
|
||||||
|
local pkg=${pkgpath##*/}
|
||||||
|
local artixrepo=$(find_repo "$package" "${staging}" "${unstable}")
|
||||||
|
local artixshow=${artixrepo%-*}
|
||||||
|
local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD
|
||||||
|
|
||||||
|
if [[ -f $pkgbuild ]];then
|
||||||
|
|
||||||
|
. $pkgbuild 2>/dev/null
|
||||||
|
local artixver=$(get_full_version $pkg)
|
||||||
|
|
||||||
|
local archpath=$(get_import_path $pkg)
|
||||||
|
|
||||||
|
local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}")
|
||||||
|
|
||||||
|
local archshow=${archrepo%-*}
|
||||||
|
pkgbuild=$archpath/repos/$archrepo/PKGBUILD
|
||||||
|
|
||||||
|
if [[ -f $pkgbuild ]];then
|
||||||
|
. $pkgbuild 2>/dev/null
|
||||||
|
local archver=$(get_full_version $pkg)
|
||||||
|
fi
|
||||||
|
|
||||||
|
local result=$(vercmp "$artixver" "$archver")
|
||||||
|
|
||||||
|
local repomatch=false
|
||||||
|
[[ "$archrepo" == "$artixrepo" ]] && repomatch=true
|
||||||
|
|
||||||
|
if ${move};then
|
||||||
|
|
||||||
|
if [ $result -gt -1 ];then
|
||||||
|
case $artixrepo in
|
||||||
|
*testing*|*staging*)
|
||||||
|
if $repomatch;then
|
||||||
|
msg_row "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
|
else
|
||||||
|
msg_row_notify "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif ${upgrades};then
|
||||||
|
|
||||||
|
if [ $result -eq -1 ];then
|
||||||
|
msg_row_upgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
elif ${downgrades};then
|
||||||
|
|
||||||
|
if [ $result -eq 1 ];then
|
||||||
|
if [[ -n $archver ]] && [[ -n $archrepo ]];then
|
||||||
|
msg_row_downgrade "${table}" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" "${group#*-}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
unset pkgver epoch pkgrel artixver archver pkgbuild archpath
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_db_entry() {
|
||||||
|
local pkgname="$1" repo="$(arch2artix $2)"
|
||||||
|
if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_db(){
|
||||||
|
local pkgpath="$1"
|
||||||
|
local pkg=${pkgpath##*/}
|
||||||
|
local sarch=(any ${ARCH})
|
||||||
|
local arch_repos=$(arch_repos "${staging}" "${unstable}")
|
||||||
|
|
||||||
|
for repo in ${arch_repos[@]};do
|
||||||
|
|
||||||
|
for a in ${sarch[@]};do
|
||||||
|
|
||||||
|
local pkgbuild=$pkgpath/repos/$repo-$a/PKGBUILD
|
||||||
|
|
||||||
|
if [[ -f $pkgbuild ]];then
|
||||||
|
|
||||||
|
. $pkgbuild 2>/dev/null
|
||||||
|
local artixver=$(get_full_version $pkg)
|
||||||
|
local is_entry=false
|
||||||
|
|
||||||
|
for name in ${pkgname[@]};do
|
||||||
|
|
||||||
|
if is_db_entry "$name-$artixver" "$repo";then
|
||||||
|
is_entry=true
|
||||||
|
fi
|
||||||
|
if ! $is_entry; then
|
||||||
|
msg_row "${table2}" "$repo" "$name" "$artixver" "$is_entry"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
update_db_cache(){
|
||||||
|
msg "Updating database cache"
|
||||||
|
for repo in "${searchrepos[@]}"; do
|
||||||
|
local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}
|
||||||
|
rm -rf "$cachedir"
|
||||||
|
mkdir -p "$cachedir"
|
||||||
|
msg2 "%s" "$repo"
|
||||||
|
curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \
|
||||||
|
| bsdtar -xf - -C "$cachedir"
|
||||||
|
done
|
||||||
|
msg "Done"
|
||||||
|
}
|
||||||
|
|
||||||
|
query_db() {
|
||||||
|
msg_table_header "${table3}" "Repo" "Package" "Library"
|
||||||
|
for repo in "${searchrepos[@]}"; do
|
||||||
|
local prefix=
|
||||||
|
local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/
|
||||||
|
if [[ -d ${db} ]]; then
|
||||||
|
while read -rd '' pkg; do
|
||||||
|
read -r match
|
||||||
|
pkg=${pkg#${db}}
|
||||||
|
pkg="${pkg%/*}"
|
||||||
|
|
||||||
|
msg_row "${table3}" "${repo}" "${pkg}" "${match}"
|
||||||
|
done < <(grep -rZ "${library}" "${db}") | sort -u
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
show_version_table(){
|
show_version_table(){
|
||||||
msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version"
|
|
||||||
|
if ${check};then
|
||||||
|
${sync} && update_db_cache
|
||||||
|
msg_table_header "${table2}" "Repo" "Package" "Version" "Database"
|
||||||
|
elif ${query};then
|
||||||
|
${sync} && update_db_cache
|
||||||
|
query_db
|
||||||
|
else
|
||||||
|
msg_table_header "${table}" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" "Group"
|
||||||
|
fi
|
||||||
|
|
||||||
for tree in ${TREE_NAMES_ARTIX[@]};do
|
for tree in ${TREE_NAMES_ARTIX[@]};do
|
||||||
|
|
||||||
local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d)
|
local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d)
|
||||||
|
|
||||||
for package in ${git[@]}; do
|
for package in ${git[@]}; do
|
||||||
|
if ${check};then
|
||||||
local pkg=${package##*/}
|
check_db "$package"
|
||||||
local artixrepo=$(find_repo "$package" "${staging}" "${unstable}")
|
else
|
||||||
local artixshow=${artixrepo%-*}
|
compare "$package" "$tree"
|
||||||
local pkgbuild=$package/repos/$artixrepo/PKGBUILD
|
|
||||||
|
|
||||||
if [[ -f $pkgbuild ]];then
|
|
||||||
|
|
||||||
. $pkgbuild 2>/dev/null
|
|
||||||
local artixver=$(get_full_version $pkg)
|
|
||||||
|
|
||||||
local archpath=$(get_import_path $pkg)
|
|
||||||
|
|
||||||
local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}")
|
|
||||||
|
|
||||||
local archshow=${archrepo%-*}
|
|
||||||
pkgbuild=$archpath/repos/$archrepo/PKGBUILD
|
|
||||||
|
|
||||||
if [[ -f $pkgbuild ]];then
|
|
||||||
. $pkgbuild 2>/dev/null
|
|
||||||
local archver=$(get_full_version $pkg)
|
|
||||||
fi
|
|
||||||
|
|
||||||
local result=$(vercmp "$artixver" "$archver")
|
|
||||||
|
|
||||||
local repomatch=false
|
|
||||||
[[ "$archrepo" == "$artixrepo" ]] && repomatch=true
|
|
||||||
|
|
||||||
if ${move};then
|
|
||||||
|
|
||||||
if [ $result -gt -1 ];then
|
|
||||||
case $artixrepo in
|
|
||||||
*testing*|*staging*)
|
|
||||||
if $repomatch;then
|
|
||||||
msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
|
|
||||||
else
|
|
||||||
msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif ${upgrades};then
|
|
||||||
|
|
||||||
if [ $result -eq -1 ];then
|
|
||||||
msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif ${downgrades};then
|
|
||||||
|
|
||||||
if [ $result -eq 1 ];then
|
|
||||||
if [[ -n $archver ]] && [[ -n $archrepo ]];then
|
|
||||||
msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
unset pkgver epoch pkgrel artixver archver pkgbuild archpath
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@@ -98,14 +187,35 @@ staging=true
|
|||||||
upgrades=false
|
upgrades=false
|
||||||
downgrades=false
|
downgrades=false
|
||||||
move=false
|
move=false
|
||||||
|
check=false
|
||||||
|
sync=false
|
||||||
|
query=false
|
||||||
|
|
||||||
|
artix_repos=(
|
||||||
|
'goblins' 'gremlins' 'system' 'world'
|
||||||
|
'galaxy-goblins' 'galaxy-gremlins' 'galaxy'
|
||||||
|
'lib32-goblins' 'lib32-gremlins' 'lib32'
|
||||||
|
'gnome-wobble' 'kde-wobble'
|
||||||
|
)
|
||||||
|
|
||||||
|
readonly table="%-18s %-18s %-25s %-27s %-27s %-10s"
|
||||||
|
readonly table2="%-20s %-35s %-30s %-10s"
|
||||||
|
readonly table3="%-20s %-45s %s"
|
||||||
|
|
||||||
|
searchrepos=(${artix_repos[@]})
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options]"
|
echo "Usage: ${0##*/} [options] (with -q [libname])"
|
||||||
echo ' -u Show upgrade packages'
|
echo ' -u Show upgrade packages'
|
||||||
echo ' -d Show downgrade packages'
|
echo ' -d Show downgrade packages'
|
||||||
echo ' -m Show packages to move'
|
echo ' -m Show packages to move'
|
||||||
echo " -x Don't inlcude staging packages"
|
echo " -x Don't inlcude staging packages"
|
||||||
echo ' -y Include unstable kde and gnome'
|
echo ' -y Include unstable kde and gnome'
|
||||||
|
echo ' -c Check repos'
|
||||||
|
echo " -s Sync repo databases"
|
||||||
|
echo " -q Query repo databases for so libs"
|
||||||
|
echo ' -r <repo> Repo name to query'
|
||||||
|
echo ' [default: all]'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
echo ''
|
echo ''
|
||||||
@@ -114,7 +224,7 @@ usage() {
|
|||||||
|
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
|
|
||||||
opts='udmxyh'
|
opts='r:qcsudmxyh'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
@@ -123,6 +233,10 @@ while getopts "${opts}" arg; do
|
|||||||
m) move=true ;;
|
m) move=true ;;
|
||||||
x) staging=false ;;
|
x) staging=false ;;
|
||||||
y) unstable=true ;;
|
y) unstable=true ;;
|
||||||
|
c) check=true ;;
|
||||||
|
s) sync=true ;;
|
||||||
|
q) query=true ;;
|
||||||
|
r) searchrepos=("$OPTARG") ;;
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||||
esac
|
esac
|
||||||
@@ -130,4 +244,6 @@ done
|
|||||||
|
|
||||||
shift $(($OPTIND - 1))
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
|
library="$1"; shift
|
||||||
|
|
||||||
show_version_table
|
show_version_table
|
||||||
|
@@ -15,13 +15,75 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
|
find_cached_pkgfile() {
|
||||||
|
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||||
|
local pkg="$1"
|
||||||
|
for dir in "${searchdirs[@]}"; do
|
||||||
|
[[ -d $dir ]] || continue
|
||||||
|
results+=$(find "$dir" -type f -name "$pkg")
|
||||||
|
done
|
||||||
|
case ${#results[*]} in
|
||||||
|
0)
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
printf '%s\n' "${results[0]}"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error 'Multiple packages found:'
|
||||||
|
printf '\t%s\n' "${results[@]}" >&2
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
update_repo2(){
|
||||||
|
local repo="$1"
|
||||||
|
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
|
||||||
|
|
||||||
|
for name in ${passfiles[@]}; do
|
||||||
|
if pkgfile=$(find_cached_pkgfile "$name");then
|
||||||
|
info "Found: %s" "$name"
|
||||||
|
if ${add_pkg};then
|
||||||
|
local action='add'
|
||||||
|
packages+=("$name")
|
||||||
|
# checkpkg "${pkgfile}" || return 2
|
||||||
|
if ${sign_pkg};then
|
||||||
|
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
|
||||||
|
signfile ${pkgfile}
|
||||||
|
fi
|
||||||
|
ln -sf ${pkgfile}{,.sig} $repo_path/
|
||||||
|
elif ${del_pkg};then
|
||||||
|
local action='remove'
|
||||||
|
packages+=("$name")
|
||||||
|
[[ -e $repo_path/$name ]] && rm $repo_path/$name
|
||||||
|
[[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cd $repo_path
|
||||||
|
if [[ -n $action ]]; then
|
||||||
|
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
|
||||||
|
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
update_repo(){
|
update_repo(){
|
||||||
local repo="$1" pkgfile ver ext=db.tar.xz
|
local repo="$1" pkgfile ver
|
||||||
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
|
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
|
||||||
|
|
||||||
. PKGBUILD
|
. PKGBUILD
|
||||||
|
|
||||||
for name in ${pkgname[@]};do
|
local pkgsearch=(${pkgname[@]})
|
||||||
|
if check_option "debug" "y"; then
|
||||||
|
pkgbase=${pkgbase:-${pkgname[@]}}
|
||||||
|
pkgsearch+=("${pkgbase}-debug")
|
||||||
|
fi
|
||||||
|
|
||||||
|
for name in ${pkgsearch[@]}; do
|
||||||
pkgarch=$(get_pkg_arch "$name")
|
pkgarch=$(get_pkg_arch "$name")
|
||||||
ver=$(get_full_version "$name")
|
ver=$(get_full_version "$name")
|
||||||
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
|
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
|
||||||
@@ -45,7 +107,11 @@ update_repo(){
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
cd $repo_path
|
cd $repo_path
|
||||||
[[ -n $action ]] && repo-$action -R $repo.$ext ${packages[@]}
|
if [[ -n $action ]]; then
|
||||||
|
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
|
||||||
|
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,6 +124,7 @@ load_vars /etc/makepkg.conf
|
|||||||
add_pkg=false
|
add_pkg=false
|
||||||
del_pkg=false
|
del_pkg=false
|
||||||
sign_pkg=false
|
sign_pkg=false
|
||||||
|
linksdb=false
|
||||||
|
|
||||||
cmd=${0##*/}
|
cmd=${0##*/}
|
||||||
dest_repo=${cmd#*-}
|
dest_repo=${cmd#*-}
|
||||||
@@ -66,6 +133,7 @@ usage() {
|
|||||||
echo "Usage: ${cmd} [options]"
|
echo "Usage: ${cmd} [options]"
|
||||||
echo ' -a Add package(s) to repository'
|
echo ' -a Add package(s) to repository'
|
||||||
echo ' -r Remove package(s) from repository'
|
echo ' -r Remove package(s) from repository'
|
||||||
|
echo ' -l Use links db'
|
||||||
echo ' -s Sign package(s)'
|
echo ' -s Sign package(s)'
|
||||||
echo ' -h This help'
|
echo ' -h This help'
|
||||||
echo ''
|
echo ''
|
||||||
@@ -73,12 +141,13 @@ usage() {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
opts='arsh'
|
opts='arlsh'
|
||||||
|
|
||||||
while getopts "${opts}" arg; do
|
while getopts "${opts}" arg; do
|
||||||
case "${arg}" in
|
case "${arg}" in
|
||||||
a) add_pkg=true; del_pkg=false ;;
|
a) add_pkg=true; del_pkg=false ;;
|
||||||
r) del_pkg=true; add_pkg=false ;;
|
r) del_pkg=true; add_pkg=false ;;
|
||||||
|
l) linksdb=true ;;
|
||||||
s) sign_pkg=true ;;
|
s) sign_pkg=true ;;
|
||||||
h|?) usage 0 ;;
|
h|?) usage 0 ;;
|
||||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||||
@@ -87,6 +156,12 @@ done
|
|||||||
|
|
||||||
shift $(($OPTIND - 1))
|
shift $(($OPTIND - 1))
|
||||||
|
|
||||||
|
passfiles="$@"
|
||||||
|
|
||||||
prepare_dir "${REPOS_ROOT}"
|
prepare_dir "${REPOS_ROOT}"
|
||||||
|
|
||||||
update_repo "${dest_repo}"
|
if [[ -n ${passfiles[@]} ]]; then
|
||||||
|
update_repo2 "${dest_repo}"
|
||||||
|
else
|
||||||
|
update_repo "${dest_repo}"
|
||||||
|
fi
|
||||||
|
@@ -15,23 +15,6 @@
|
|||||||
. @libdir@/artools/util-base.sh
|
. @libdir@/artools/util-base.sh
|
||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
# $1: sofile
|
|
||||||
# $2: soarch
|
|
||||||
process_sofile() {
|
|
||||||
# extract the library name: libfoo.so
|
|
||||||
local soname="${1%.so?(+(.+([0-9])))}".so
|
|
||||||
# extract the major version: 1
|
|
||||||
soversion="${1##*\.so\.}"
|
|
||||||
if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then
|
|
||||||
# libfoo.so=1-64
|
|
||||||
msg "${soname}=${soversion}-$2"
|
|
||||||
soobjects+=("${soname}=${soversion}-$2")
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
@@ -42,7 +25,7 @@ if [[ $1 = "--ignore-internal" ]]; then
|
|||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
script_mode=${0##*/find-lib}
|
script_mode=${BASH_SOURCE[0]##*/find-lib}
|
||||||
|
|
||||||
case $script_mode in
|
case $script_mode in
|
||||||
deps|provides) true;;
|
deps|provides) true;;
|
||||||
@@ -57,9 +40,9 @@ if [[ -z $1 ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -d $1 ]]; then
|
if [[ -d $1 ]]; then
|
||||||
pushd $1 >/dev/null
|
pushd "$1" >/dev/null
|
||||||
else
|
else
|
||||||
WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX")
|
setup_workdir
|
||||||
|
|
||||||
case ${script_mode} in
|
case ${script_mode} in
|
||||||
deps) bsdtar -C "$WORKDIR" -xf "$1";;
|
deps) bsdtar -C "$WORKDIR" -xf "$1";;
|
||||||
@@ -69,12 +52,27 @@ else
|
|||||||
pushd "$WORKDIR" >/dev/null
|
pushd "$WORKDIR" >/dev/null
|
||||||
fi
|
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
|
case $script_mode in
|
||||||
deps) find_args=(-perm -u+x);;
|
deps) find_args=(-perm -u+x);;
|
||||||
provides) find_args=(-name *.so*);;
|
provides) find_args=(-name '*.so*');;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
find $PWD -type f "${find_args[@]}" | while read filename; do
|
find . -type f "${find_args[@]}" | while read -r filename; do
|
||||||
if [[ $script_mode = "provides" ]]; then
|
if [[ $script_mode = "provides" ]]; then
|
||||||
# ignore if we don't have a shared object
|
# 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
|
if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
|
||||||
@@ -90,11 +88,11 @@ find $PWD -type f "${find_args[@]}" | while read filename; do
|
|||||||
# get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1
|
# 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')
|
sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p')
|
||||||
[[ -z $sofile ]] && sofile="${filename##*/}"
|
[[ -z $sofile ]] && sofile="${filename##*/}"
|
||||||
process_sofile "${sofile}" "${soarch}"
|
process_sofile
|
||||||
elif [[ $script_mode = "deps" ]]; then
|
elif [[ $script_mode = "deps" ]]; then
|
||||||
# process all libraries needed by the binary
|
# 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
|
for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do
|
||||||
process_sofile "${sofile}" "${soarch}"
|
process_sofile
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@@ -25,24 +25,25 @@ if [[ -z $match ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
find $PWD -type d | while read d; do
|
find . -type d -print0 2>/dev/null| while read -r -d '' d; do
|
||||||
if [[ -f "$d/PKGBUILD" ]]; then
|
if [[ -f "$d/PKGBUILD" ]]; then
|
||||||
unset pkgname depends makedepends optdepends
|
pkgname=() depends=() makedepends=() optdepends=()
|
||||||
|
# shellcheck source=PKGBUILD.proto
|
||||||
. "$d/PKGBUILD"
|
. "$d/PKGBUILD"
|
||||||
for dep in "${depends[@]}"; do
|
for dep in "${depends[@]}"; do
|
||||||
# lose the version comparator, if any
|
# lose the version comparator, if any
|
||||||
depname=${dep%%[<>=]*}
|
depname=${dep%%[<>=]*}
|
||||||
[[ $depname = $match ]] && msg "$d (depends)"
|
[[ $depname = "$match" ]] && echo "$d (depends)"
|
||||||
done
|
done
|
||||||
for dep in "${makedepends[@]}"; do
|
for dep in "${makedepends[@]}"; do
|
||||||
# lose the version comparator, if any
|
# lose the version comparator, if any
|
||||||
depname=${dep%%[<>=]*}
|
depname=${dep%%[<>=]*}
|
||||||
[[ $depname = $match ]] && msg "$d (makedepends)"
|
[[ $depname = "$match" ]] && echo "$d (makedepends)"
|
||||||
done
|
done
|
||||||
for dep in "${optdepends[@]/:*}"; do
|
for dep in "${optdepends[@]/:*}"; do
|
||||||
# lose the version comaparator, if any
|
# lose the version comaparator, if any
|
||||||
depname=${dep%%[<>=]*}
|
depname=${dep%%[<>=]*}
|
||||||
[[ $depname = $match ]] && msg "$d (optdepends)"
|
[[ $depname = "$match" ]] && echo "$d (optdepends)"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
518
bin/pkg/links-add.in
Normal file
518
bin/pkg/links-add.in
Normal file
@@ -0,0 +1,518 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# links-add - add a package to a given repo database file
|
||||||
|
# links-remove - remove a package entry from a given repo database file
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org>
|
||||||
|
# Copyright (c) 2019 artoo@artixlinux.org
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
|
||||||
|
declare -r REPO_DB_NAME="links"
|
||||||
|
|
||||||
|
QUIET=0
|
||||||
|
ONLYADDNEW=0
|
||||||
|
SIGN=0
|
||||||
|
KEY=0
|
||||||
|
VERIFY=0
|
||||||
|
REPO_DB_FILE=
|
||||||
|
REPO_DB_PREFIX=
|
||||||
|
REPO_DB_SUFFIX=
|
||||||
|
LOCKFILE=
|
||||||
|
CLEAN_LOCK=0
|
||||||
|
|
||||||
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
|
# ensure we have a sane umask set
|
||||||
|
umask 0022
|
||||||
|
|
||||||
|
# print usage instructions
|
||||||
|
usage() {
|
||||||
|
cmd=${0##*/}
|
||||||
|
printf -- "%s \n\n" "$cmd"
|
||||||
|
if [[ $cmd == "links-add" ]] ; then
|
||||||
|
printf -- "Usage: links-add [options] <path-to-db> <package> ...\n"
|
||||||
|
printf -- "\n"
|
||||||
|
printf -- "\
|
||||||
|
links-add will update a package database by reading a package file.\n\
|
||||||
|
Multiple packages to add can be specified on the command line.\n"
|
||||||
|
printf -- "\n"
|
||||||
|
printf -- "Options:\n"
|
||||||
|
printf -- " -n, --new only add packages that are not already in the database\n"
|
||||||
|
elif [[ $cmd == "links-remove" ]] ; then
|
||||||
|
printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n"
|
||||||
|
printf -- "\n"
|
||||||
|
printf -- "\
|
||||||
|
links-remove will update a package database by removing the package name\n\
|
||||||
|
specified on the command line from the given repo database. Multiple\n\
|
||||||
|
packages to remove can be specified on the command line.\n"
|
||||||
|
printf -- "\n"
|
||||||
|
printf -- "Options:\n"
|
||||||
|
else
|
||||||
|
printf -- "Please move along, there is nothing to see here.\n"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
printf -- " --nocolor turn off color in output\n"
|
||||||
|
printf -- " -q, --quiet minimize output\n"
|
||||||
|
printf -- " -s, --sign sign database with GnuPG after update\n"
|
||||||
|
printf -- " -k, --key <key> use the specified key to sign the database\n"
|
||||||
|
printf -- " -v, --verify verify database's signature before update\n"
|
||||||
|
printf -- "\n\
|
||||||
|
See %s(8) for more details and descriptions of the available options.\n" $cmd
|
||||||
|
printf "\n"
|
||||||
|
if [[ $cmd == "links-add" ]] ; then
|
||||||
|
printf -- "Example: links-add /path/to/repo.${LINKSDBEXT} pacman-5.1.3-1-x86_64.pkg.tar.xz\n"
|
||||||
|
elif [[ $cmd == "links-remove" ]] ; then
|
||||||
|
printf -- "Example: links-remove /path/to/repo.${LINKSDBEXT} kernel26\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
find_pkgentry() {
|
||||||
|
local pkgname=$1
|
||||||
|
local pkgentry
|
||||||
|
|
||||||
|
for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do
|
||||||
|
name=${pkgentry##*/}
|
||||||
|
if [[ ${name%-*-*} = $pkgname ]]; then
|
||||||
|
echo $pkgentry
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_gpg() {
|
||||||
|
if ! type -p gpg >/dev/null; then
|
||||||
|
error "Cannot find the gpg binary! Is GnuPG installed?"
|
||||||
|
exit 1 # $E_MISSING_PROGRAM
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( ! VERIFY )); then
|
||||||
|
if ! gpg --list-key ${GPGKEY} &>/dev/null; then
|
||||||
|
if [[ ! -z $GPGKEY ]]; then
|
||||||
|
error "The key ${GPGKEY} does not exist in your keyring."
|
||||||
|
elif (( ! KEY )); then
|
||||||
|
error "There is no key in your keyring."
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# sign the package database once repackaged
|
||||||
|
create_signature() {
|
||||||
|
(( ! SIGN )) && return
|
||||||
|
local dbfile=$1
|
||||||
|
local ret=0
|
||||||
|
msg "Signing database '%s'..." "${dbfile##*/.tmp.}"
|
||||||
|
|
||||||
|
local SIGNWITHKEY=""
|
||||||
|
if [[ -n $GPGKEY ]]; then
|
||||||
|
SIGNWITHKEY="-u ${GPGKEY}"
|
||||||
|
fi
|
||||||
|
gpg --detach-sign --use-agent --no-armor ${SIGNWITHKEY} "$dbfile" &>/dev/null || ret=$?
|
||||||
|
|
||||||
|
if (( ! ret )); then
|
||||||
|
msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig"
|
||||||
|
else
|
||||||
|
warning "Failed to sign package database file '%s'" "${dbfile##*/.tmp.}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# verify the existing package database signature
|
||||||
|
verify_signature() {
|
||||||
|
(( ! VERIFY )) && return
|
||||||
|
local dbfile=$1
|
||||||
|
local ret=0
|
||||||
|
msg "Verifying database signature..."
|
||||||
|
|
||||||
|
if [[ ! -f $dbfile.sig ]]; then
|
||||||
|
warning "No existing signature found, skipping verification."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
gpg --verify "$dbfile.sig" || ret=$?
|
||||||
|
if (( ! ret )); then
|
||||||
|
msg2 "Database signature file verified."
|
||||||
|
else
|
||||||
|
error "Database signature was NOT valid!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
verify_repo_extension() {
|
||||||
|
local repofile=$1
|
||||||
|
|
||||||
|
case $repofile in
|
||||||
|
*.links.tar.gz) TAR_OPT="z" ;;
|
||||||
|
*.links.tar.bz2) TAR_OPT="j" ;;
|
||||||
|
*.links.tar.xz) TAR_OPT="J" ;;
|
||||||
|
*.links.tar.zst) TAR_OPT="--zstd" ;;
|
||||||
|
*.links.tar.Z) TAR_OPT="Z" ;;
|
||||||
|
*.links.tar) TAR_OPT="" ;;
|
||||||
|
*) error "'%s' does not have a valid database archive extension." \
|
||||||
|
"$repofile"
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf '%s' "$TAR_OPT"
|
||||||
|
}
|
||||||
|
|
||||||
|
# write an entry to the pacman database
|
||||||
|
# arg1 - path to package
|
||||||
|
db_write_entry() {
|
||||||
|
# blank out all variables
|
||||||
|
local pkgfile=$1
|
||||||
|
|
||||||
|
local pkgname pkgver
|
||||||
|
|
||||||
|
# read info from the zipped package
|
||||||
|
local line var val
|
||||||
|
while read -r line; do
|
||||||
|
[[ ${line:0:1} = '#' ]] && continue
|
||||||
|
IFS=' =' read -r var val < <(printf '%s\n' "$line")
|
||||||
|
# normalize whitespace with an extglob
|
||||||
|
declare "$var=${val//+([[:space:]])/ }"
|
||||||
|
|
||||||
|
done< <(bsdtar -xOqf "$pkgfile" .PKGINFO)
|
||||||
|
|
||||||
|
# ensure $pkgname and $pkgver variables were found
|
||||||
|
if [[ -z $pkgname || -z $pkgver ]]; then
|
||||||
|
error "Invalid package file '%s'." "$pkgfile"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d $tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver ]]; then
|
||||||
|
warning "An entry for '%s' already existed" "$pkgname-$pkgver"
|
||||||
|
if (( ONLYADDNEW )); then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove an existing entry if it exists, ignore failures
|
||||||
|
db_remove_entry "$pkgname"
|
||||||
|
|
||||||
|
local tmppkg=$tmpdir/pkg/$pkgname-$pkgver
|
||||||
|
|
||||||
|
mkdir "$tmppkg"
|
||||||
|
|
||||||
|
bsdtar -xof $pkgfile -C $tmppkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null
|
||||||
|
|
||||||
|
pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null
|
||||||
|
mkdir "$pkgname-$pkgver"
|
||||||
|
pushd "$pkgname-$pkgver" >/dev/null
|
||||||
|
|
||||||
|
# create links entry
|
||||||
|
msg2 "Creating '%s' db entry..." "${REPO_DB_NAME}"
|
||||||
|
|
||||||
|
local linksentry=$tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver/${REPO_DB_NAME}
|
||||||
|
|
||||||
|
for f in $(find $tmppkg -type f); do
|
||||||
|
readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'
|
||||||
|
done | sort -u > $linksentry
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove existing entries from the DB
|
||||||
|
# arg1 - package name
|
||||||
|
db_remove_entry() {
|
||||||
|
local pkgname=$1
|
||||||
|
local notfound=1
|
||||||
|
local pkgentry=$(find_pkgentry "$pkgname")
|
||||||
|
while [[ -n $pkgentry ]]; do
|
||||||
|
notfound=0
|
||||||
|
|
||||||
|
msg2 "Removing existing entry '%s'..." \
|
||||||
|
"${pkgentry##*/}"
|
||||||
|
rm -rf "$pkgentry"
|
||||||
|
|
||||||
|
# remove entries in "links" database
|
||||||
|
local linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//')
|
||||||
|
rm -rf "$linksentry"
|
||||||
|
|
||||||
|
pkgentry=$(find_pkgentry "$pkgname")
|
||||||
|
done
|
||||||
|
return $notfound
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_repo_db() {
|
||||||
|
local repodir dbfile
|
||||||
|
|
||||||
|
# ensure the path to the DB exists; $LOCKFILE is always an absolute path
|
||||||
|
repodir=${LOCKFILE%/*}/
|
||||||
|
|
||||||
|
if [[ ! -d $repodir ]]; then
|
||||||
|
error "%s does not exist or is not a directory." "$repodir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check lock file
|
||||||
|
if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then
|
||||||
|
CLEAN_LOCK=1
|
||||||
|
else
|
||||||
|
error "Failed to acquire lockfile: %s." "$LOCKFILE"
|
||||||
|
[[ -f $LOCKFILE ]] && error "Held by process %s" "$(cat "$LOCKFILE")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX
|
||||||
|
|
||||||
|
if [[ -f $dbfile ]]; then
|
||||||
|
# there are two situations we can have here:
|
||||||
|
# a DB with some entries, or a DB with no contents at all.
|
||||||
|
if ! bsdtar -tqf "$dbfile" '*/links' >/dev/null 2>&1; then
|
||||||
|
# check empty case
|
||||||
|
if [[ -n $(bsdtar -tqf "$dbfile" '*' 2>/dev/null) ]]; then
|
||||||
|
error "Repository file '%s' is not a proper links database." "$dbfile"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
verify_signature "$dbfile"
|
||||||
|
msg "Extracting %s to a temporary location..." "${dbfile##*/}"
|
||||||
|
bsdtar -xf "$dbfile" -C "$tmpdir/${REPO_DB_NAME}"
|
||||||
|
else
|
||||||
|
case $cmd in
|
||||||
|
links-remove)
|
||||||
|
# only a missing "db" database is currently an error
|
||||||
|
# TODO: remove if statement
|
||||||
|
if [[ ${REPO_DB_NAME} == "links" ]]; then
|
||||||
|
error "Repository file '%s' was not found." "$dbfile"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
links-add)
|
||||||
|
# check if the file can be created (write permission, directory existence, etc)
|
||||||
|
if ! touch "$dbfile"; then
|
||||||
|
error "Repository file '%s' could not be created." "$dbfile"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -f "$dbfile"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add() {
|
||||||
|
if [[ ! -f $1 ]]; then
|
||||||
|
error "File '%s' not found." "$1"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkgfile=$1
|
||||||
|
if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then
|
||||||
|
error "'%s' is not a package file, skipping" "$pkgfile"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Adding package '%s'" "$pkgfile"
|
||||||
|
|
||||||
|
db_write_entry "$pkgfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
remove() {
|
||||||
|
pkgname=$1
|
||||||
|
msg "Searching for package '%s'..." "$pkgname"
|
||||||
|
|
||||||
|
if ! db_remove_entry "$pkgname"; then
|
||||||
|
error "Package matching '%s' not found." "$pkgname"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
rotate_db() {
|
||||||
|
dirname=${LOCKFILE%/*}
|
||||||
|
|
||||||
|
pushd "$dirname" >/dev/null
|
||||||
|
|
||||||
|
filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX}
|
||||||
|
tempname=$dirname/.tmp.$filename
|
||||||
|
|
||||||
|
# hardlink or move the previous version of the database and signature to .old
|
||||||
|
# extension as a backup measure
|
||||||
|
if [[ -f $filename ]]; then
|
||||||
|
ln -f "$filename" "$filename.old" 2>/dev/null || \
|
||||||
|
mv -f "$filename" "$filename.old"
|
||||||
|
|
||||||
|
if [[ -f $filename.sig ]]; then
|
||||||
|
ln -f "$filename.sig" "$filename.old.sig" 2>/dev/null || \
|
||||||
|
mv -f "$filename.sig" "$filename.old.sig"
|
||||||
|
else
|
||||||
|
rm -f "$filename.old.sig"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# rotate the newly-created database and signature into place
|
||||||
|
mv "$tempname" "$filename"
|
||||||
|
if [[ -f $tempname.sig ]]; then
|
||||||
|
mv "$tempname.sig" "$filename.sig"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dblink=${filename%.tar*}
|
||||||
|
rm -f "$dblink" "$dblink.sig"
|
||||||
|
ln -s "$filename" "$dblink" 2>/dev/null || \
|
||||||
|
ln "$filename" "$dblink" 2>/dev/null || \
|
||||||
|
cp "$filename" "$dblink"
|
||||||
|
if [[ -f "$filename.sig" ]]; then
|
||||||
|
ln -s "$filename.sig" "$dblink.sig" 2>/dev/null || \
|
||||||
|
ln "$filename.sig" "$dblink.sig" 2>/dev/null || \
|
||||||
|
cp "$filename.sig" "$dblink.sig"
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
create_db() {
|
||||||
|
TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE")
|
||||||
|
# $LOCKFILE is already guaranteed to be absolute so this is safe
|
||||||
|
dirname=${LOCKFILE%/*}
|
||||||
|
|
||||||
|
filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX}
|
||||||
|
# this ensures we create it on the same filesystem, making moves atomic
|
||||||
|
tempname=$dirname/.tmp.$filename
|
||||||
|
|
||||||
|
pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null
|
||||||
|
if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then
|
||||||
|
bsdtar -c${TAR_OPT}f "$tempname" *
|
||||||
|
else
|
||||||
|
# we have no packages remaining? zip up some emptyness
|
||||||
|
warning "No packages remain, creating empty database."
|
||||||
|
bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null
|
||||||
|
fi
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
create_signature "$tempname"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_exit() {
|
||||||
|
# unhook all traps to avoid race conditions
|
||||||
|
trap '' EXIT TERM HUP QUIT INT ERR
|
||||||
|
|
||||||
|
echo
|
||||||
|
error "$@"
|
||||||
|
clean_up 1
|
||||||
|
}
|
||||||
|
|
||||||
|
clean_up() {
|
||||||
|
local exit_code=${1:-$?}
|
||||||
|
|
||||||
|
# unhook all traps to avoid race conditions
|
||||||
|
trap '' EXIT TERM HUP QUIT INT ERR
|
||||||
|
|
||||||
|
[[ -d $tmpdir ]] && rm -rf "$tmpdir"
|
||||||
|
(( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE"
|
||||||
|
|
||||||
|
exit $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
|
# PROGRAM START
|
||||||
|
case $1 in
|
||||||
|
-h|--help) usage; exit 0;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# figure out what program we are
|
||||||
|
cmd=${0##*/}
|
||||||
|
|
||||||
|
if [[ $cmd != "links-add" && $cmd != "links-remove" ]]; then
|
||||||
|
error "Invalid command name '%s' specified." "$cmd"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/repo-tools.XXXXXXXXXX") || (\
|
||||||
|
error "Cannot create temp directory for database building."; \
|
||||||
|
exit 1)
|
||||||
|
|
||||||
|
for repo in "pkg" "${REPO_DB_NAME}"; do
|
||||||
|
mkdir "$tmpdir/$repo"
|
||||||
|
done
|
||||||
|
|
||||||
|
trap 'clean_up' EXIT
|
||||||
|
for signal in TERM HUP QUIT; do
|
||||||
|
trap "trap_exit \"$(gettext "%s signal caught. Exiting...")\" \"$signal\"" "$signal"
|
||||||
|
done
|
||||||
|
trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
|
||||||
|
trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
|
||||||
|
|
||||||
|
declare -a args
|
||||||
|
# parse arguments
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
-q|--quiet) QUIET=1 ;;
|
||||||
|
-n|--new) ONLYADDNEW=1 ;;
|
||||||
|
-s|--sign) SIGN=1 ;;
|
||||||
|
-k|--key) KEY=1 ; shift; GPGKEY=$1 ;;
|
||||||
|
-v|--verify) VERIFY=1 ;;
|
||||||
|
*) args+=("$1") ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
REPO_DB_FILE=${args[0]}
|
||||||
|
if [[ -z $REPO_DB_FILE ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $REPO_DB_FILE == /* ]]; then
|
||||||
|
LOCKFILE=$REPO_DB_FILE.lck
|
||||||
|
else
|
||||||
|
LOCKFILE=$PWD/$REPO_DB_FILE.lck
|
||||||
|
fi
|
||||||
|
|
||||||
|
verify_repo_extension "$REPO_DB_FILE" >/dev/null
|
||||||
|
|
||||||
|
REPO_DB_PREFIX=${REPO_DB_FILE##*/}
|
||||||
|
REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*}
|
||||||
|
REPO_DB_SUFFIX=${REPO_DB_FILE##*.links.}
|
||||||
|
|
||||||
|
if (( SIGN || VERIFY )); then
|
||||||
|
check_gpg
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( VERIFY && ${#args[@]} == 1 )); then
|
||||||
|
dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX
|
||||||
|
|
||||||
|
if [[ -f $dbfile ]]; then
|
||||||
|
verify_signature "$dbfile"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
prepare_repo_db
|
||||||
|
|
||||||
|
fail=0
|
||||||
|
for arg in "${args[@]:1}"; do
|
||||||
|
case $cmd in
|
||||||
|
links-add) add "$arg" ;;
|
||||||
|
links-remove) remove "$arg" ;;
|
||||||
|
esac || fail=1
|
||||||
|
done
|
||||||
|
|
||||||
|
# if the whole operation was a success, re-zip and rotate databases
|
||||||
|
if (( !fail )); then
|
||||||
|
msg "Creating updated database file '%s'" "$REPO_DB_FILE"
|
||||||
|
create_db
|
||||||
|
rotate_db
|
||||||
|
else
|
||||||
|
msg "No packages modified, nothing to do."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
@@ -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,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME
|
# 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
|
|
||||||
|
|
||||||
$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"
|
|
||||||
|
|
||||||
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
|
|
||||||
|
|
||||||
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 "$@"
|
|
||||||
|
@@ -79,15 +79,21 @@ write_details() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
write_pkg_yaml(){
|
write_pkg_yaml(){
|
||||||
local pkgfile=$(print_all_package_names)
|
|
||||||
|
|
||||||
Yaml=$(write_yaml_header)
|
Yaml=$(write_yaml_header)
|
||||||
|
|
||||||
Yaml+=$(write_empty_line)
|
Yaml+=$(write_empty_line)
|
||||||
|
|
||||||
|
local full=$(get_full_version)
|
||||||
|
|
||||||
|
local ver=${full:-0}
|
||||||
|
|
||||||
|
pkgbase=${pkgbase:-${pkgname[0]}}
|
||||||
|
|
||||||
Yaml+=$(write_yaml_map 0 "pkgbase")
|
Yaml+=$(write_yaml_map 0 "pkgbase")
|
||||||
Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase:-$pkgname}")
|
Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase}")
|
||||||
${details} && write_details ''
|
${details} && write_details ''
|
||||||
|
Yaml+=$(write_yaml_map 2 "fullver" "${ver}")
|
||||||
|
|
||||||
Yaml+=$(write_empty_line)
|
Yaml+=$(write_empty_line)
|
||||||
|
|
||||||
@@ -99,6 +105,8 @@ write_pkg_yaml(){
|
|||||||
|
|
||||||
Yaml+=$(write_empty_line)
|
Yaml+=$(write_empty_line)
|
||||||
|
|
||||||
|
local pkgfile=$(print_all_package_names)
|
||||||
|
|
||||||
Yaml+=$(write_yaml_map 0 "pkgfile")
|
Yaml+=$(write_yaml_map 0 "pkgfile")
|
||||||
for f in ${pkgfile[@]};do
|
for f in ${pkgfile[@]};do
|
||||||
Yaml+=$(write_yaml_seq 2 "${f##*/}")
|
Yaml+=$(write_yaml_seq 2 "${f##*/}")
|
||||||
@@ -136,4 +144,6 @@ PACKAGE="$1"/PKGBUILD; shift
|
|||||||
|
|
||||||
. "$PACKAGE"
|
. "$PACKAGE"
|
||||||
|
|
||||||
|
. /etc/makepkg.conf
|
||||||
|
|
||||||
write_pkg_yaml
|
write_pkg_yaml
|
||||||
|
@@ -15,13 +15,41 @@
|
|||||||
# 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_NAMES_ARTIX=(
|
||||||
|
# packages
|
||||||
|
# community
|
||||||
|
# packages-kernel
|
||||||
|
# packages-openrc
|
||||||
|
# packages-runit
|
||||||
|
# packages-media
|
||||||
|
# packages-xorg
|
||||||
|
# packages-python
|
||||||
|
# packages-perl
|
||||||
|
# packages-qt5
|
||||||
|
# packages-devel
|
||||||
|
# packages-ruby
|
||||||
|
# packages-gtk
|
||||||
|
# packages-gnome
|
||||||
|
# packages-cinnamon
|
||||||
|
# packages-lxqt
|
||||||
|
# packages-mate
|
||||||
|
# packages-kde
|
||||||
|
# )
|
||||||
|
|
||||||
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit
|
# HOST_TREE_ARCH=git://git.archlinux.org/svntogit
|
||||||
|
|
||||||
|
# TREE_DIR_ARCH=${WORKSPACE_DIR}/archlinux
|
||||||
|
|
||||||
# default repos root
|
# default repos root
|
||||||
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
||||||
|
|
||||||
|
# default mirror for sogrep
|
||||||
|
# REPOS_MIRROR="http://mirror1.artixlinux.org/repos"
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
################ artools-iso ################
|
################ artools-iso ################
|
||||||
#############################################
|
#############################################
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
#!/hint/bash
|
#!/hint/bash
|
||||||
|
# shellcheck disable=2034
|
||||||
|
|
||||||
#
|
#
|
||||||
# /etc/makepkg.conf
|
# /etc/makepkg.conf
|
||||||
#
|
#
|
||||||
@@ -37,8 +39,8 @@ CHOST="x86_64-pc-linux-gnu"
|
|||||||
|
|
||||||
#-- Compiler and Linker Flags
|
#-- Compiler and Linker Flags
|
||||||
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
||||||
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
|
||||||
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
|
||||||
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
||||||
#-- Make Flags: change this for DistCC/SMP systems
|
#-- Make Flags: change this for DistCC/SMP systems
|
||||||
#MAKEFLAGS="-j2"
|
#MAKEFLAGS="-j2"
|
||||||
@@ -143,3 +145,5 @@ COMPRESSZ=(compress -c -f)
|
|||||||
#
|
#
|
||||||
PKGEXT='.pkg.tar.xz'
|
PKGEXT='.pkg.tar.xz'
|
||||||
SRCEXT='.src.tar.gz'
|
SRCEXT='.src.tar.gz'
|
||||||
|
|
||||||
|
# vim: set ft=sh ts=2 sw=2 et:
|
||||||
|
@@ -1,63 +0,0 @@
|
|||||||
accountsservice
|
|
||||||
cairo
|
|
||||||
colord
|
|
||||||
cppunit
|
|
||||||
dbus
|
|
||||||
dbus-glib
|
|
||||||
dbus-python
|
|
||||||
desktop-file-utils
|
|
||||||
fontconfig
|
|
||||||
geoclue2
|
|
||||||
glu
|
|
||||||
gst-plugins-bad
|
|
||||||
gst-plugins-base
|
|
||||||
gst-plugins-good
|
|
||||||
gst-plugins-ugly
|
|
||||||
gstreamer
|
|
||||||
harfbuzz
|
|
||||||
hicolor-icon-theme
|
|
||||||
libatasmart
|
|
||||||
libbsd
|
|
||||||
libdrm
|
|
||||||
libevdev
|
|
||||||
libinput
|
|
||||||
libmbim
|
|
||||||
libnice
|
|
||||||
libqmi
|
|
||||||
libvdpau
|
|
||||||
libxcb
|
|
||||||
libxft
|
|
||||||
libxi
|
|
||||||
media-player-info
|
|
||||||
mesa
|
|
||||||
modemmanager
|
|
||||||
networkmanager
|
|
||||||
orc
|
|
||||||
p11-kit
|
|
||||||
polkit
|
|
||||||
poppler
|
|
||||||
poppler-data
|
|
||||||
pulseaudio
|
|
||||||
pyxdg
|
|
||||||
r
|
|
||||||
sdl
|
|
||||||
shared-mime-info
|
|
||||||
sound-theme-freedesktop
|
|
||||||
startup-notification
|
|
||||||
systemdcompat
|
|
||||||
telepathy-glib
|
|
||||||
ttf-dejavu
|
|
||||||
udisks2
|
|
||||||
upower
|
|
||||||
wayland
|
|
||||||
wayland-protocols
|
|
||||||
webrtc-audio-processing
|
|
||||||
xcb-proto
|
|
||||||
xcb-util
|
|
||||||
xcb-util-cursor
|
|
||||||
xcb-util-image
|
|
||||||
xcb-util-keysyms
|
|
||||||
xcb-util-renderutil
|
|
||||||
xcb-util-wm
|
|
||||||
xdg-user-dirs
|
|
||||||
xdg-utils
|
|
@@ -1,63 +0,0 @@
|
|||||||
adwaita-icon-theme
|
|
||||||
atk
|
|
||||||
at-spi2-atk
|
|
||||||
at-spi2-core
|
|
||||||
babl
|
|
||||||
cantarell-fonts
|
|
||||||
cogl
|
|
||||||
dconf
|
|
||||||
flatpak
|
|
||||||
gamin
|
|
||||||
gcab
|
|
||||||
gconf
|
|
||||||
gcr
|
|
||||||
gdk-pixbuf2
|
|
||||||
gegl02
|
|
||||||
git
|
|
||||||
glade
|
|
||||||
glib2
|
|
||||||
glib-networking
|
|
||||||
gnome-common
|
|
||||||
gnome-keyring
|
|
||||||
gobject-introspection
|
|
||||||
gsettings-desktop-schemas
|
|
||||||
gssdp
|
|
||||||
gtk2
|
|
||||||
gtk3
|
|
||||||
gtk-doc
|
|
||||||
gtksourceview3
|
|
||||||
gupnp
|
|
||||||
gupnp-igd
|
|
||||||
gvfs
|
|
||||||
json-glib
|
|
||||||
libcloudproviders
|
|
||||||
libcroco
|
|
||||||
libgee
|
|
||||||
libglade
|
|
||||||
libgnome-keyring
|
|
||||||
libgudev
|
|
||||||
libnotify
|
|
||||||
librsvg
|
|
||||||
libsecret
|
|
||||||
libsoup
|
|
||||||
libxml2
|
|
||||||
libxslt
|
|
||||||
meld
|
|
||||||
mobile-broadband-provider-info
|
|
||||||
modemmanager
|
|
||||||
networkmanager
|
|
||||||
network-manager-applet
|
|
||||||
orca
|
|
||||||
ostree
|
|
||||||
pango
|
|
||||||
pyatspi
|
|
||||||
pygobject
|
|
||||||
pygobject2
|
|
||||||
pygtk
|
|
||||||
rest
|
|
||||||
ttf-bitstream-vera
|
|
||||||
vala
|
|
||||||
vte
|
|
||||||
vte3
|
|
||||||
yelp-tools
|
|
||||||
yelp-xsl
|
|
@@ -1,4 +0,0 @@
|
|||||||
phonon-gstreamer
|
|
||||||
polkit-qt
|
|
||||||
extra-cmake-modules
|
|
||||||
phonon
|
|
@@ -1,16 +0,0 @@
|
|||||||
linux
|
|
||||||
nvidia
|
|
||||||
acpi_call
|
|
||||||
bbswitch
|
|
||||||
broadcom-wl
|
|
||||||
tp_smapi
|
|
||||||
r8168
|
|
||||||
virtualbox-modules-artix
|
|
||||||
linux-lts
|
|
||||||
nvidia-lts
|
|
||||||
acpi_call-lts
|
|
||||||
bbswitch-lts
|
|
||||||
broadcom-wl-lts
|
|
||||||
tp_smapi-lts
|
|
||||||
r8168-lts
|
|
||||||
linux-firmware
|
|
@@ -1,37 +0,0 @@
|
|||||||
libdmx
|
|
||||||
libfontenc
|
|
||||||
libice
|
|
||||||
libpciaccess
|
|
||||||
libsm
|
|
||||||
libx11
|
|
||||||
libxau
|
|
||||||
libxaw
|
|
||||||
libxcomposite
|
|
||||||
libxcursor
|
|
||||||
libxdamage
|
|
||||||
libxdmcp
|
|
||||||
libxext
|
|
||||||
libxfixes
|
|
||||||
libxfont2
|
|
||||||
libxi|libxft
|
|
||||||
libxinerama
|
|
||||||
libxkbfile
|
|
||||||
libxkbui
|
|
||||||
libxmu
|
|
||||||
libxpm
|
|
||||||
libxrandr
|
|
||||||
libxrender
|
|
||||||
libxres
|
|
||||||
libxshmfence
|
|
||||||
libxss
|
|
||||||
libxt
|
|
||||||
libxtst
|
|
||||||
libxv
|
|
||||||
libxvmc
|
|
||||||
libxxf86vm
|
|
||||||
pixman
|
|
||||||
xbitmaps
|
|
||||||
xkeyboard-config
|
|
||||||
xorgproto
|
|
||||||
xterm
|
|
||||||
xtrans
|
|
@@ -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}"
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@ is_subvolume() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
is_same_fs() {
|
is_same_fs() {
|
||||||
[[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]]
|
[[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
subvolume_delete_recursive() {
|
subvolume_delete_recursive() {
|
||||||
|
@@ -117,10 +117,11 @@ msg_row_notify(){
|
|||||||
|
|
||||||
msg_row(){
|
msg_row(){
|
||||||
local mesg=$1; shift
|
local mesg=$1; shift
|
||||||
printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
# printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
printf "${WHITE} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_row_upgrade(){
|
msg_row_upgrade(){
|
||||||
local mesg=$1; shift
|
local mesg=$1; shift
|
||||||
printf "${RED}${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2
|
printf "${RED} ${mesg} ${ALL_OFF}\n" "$@" >&2
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
@@ -76,19 +76,23 @@ init_artools_pkg(){
|
|||||||
|
|
||||||
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
|
[[ -z ${TREE_NAMES_ARTIX[@]} ]] && \
|
||||||
TREE_NAMES_ARTIX=(
|
TREE_NAMES_ARTIX=(
|
||||||
packages
|
packages
|
||||||
community
|
community
|
||||||
packages-kernel
|
packages-kernel
|
||||||
packages-openrc
|
packages-openrc
|
||||||
packages-runit
|
packages-runit
|
||||||
packages-xorg
|
packages-xorg
|
||||||
packages-python
|
packages-python
|
||||||
packages-perl
|
packages-perl
|
||||||
packages-qt5
|
packages-qt5
|
||||||
packages-ruby
|
packages-devel
|
||||||
# packages-desktop
|
packages-ruby
|
||||||
# packages-kde
|
packages-gtk
|
||||||
# packages-gnome
|
packages-gnome
|
||||||
|
packages-cinnamon
|
||||||
|
packages-lxqt
|
||||||
|
packages-mate
|
||||||
|
packages-kde
|
||||||
)
|
)
|
||||||
|
|
||||||
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
|
HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"}
|
||||||
@@ -102,6 +106,14 @@ init_artools_pkg(){
|
|||||||
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
|
CHROOTS_PKG="${CHROOTS_DIR}/buildpkg"
|
||||||
|
|
||||||
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
|
REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"}
|
||||||
|
|
||||||
|
REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
|
||||||
|
|
||||||
|
DBEXT=${DBEXT:-'xz'}
|
||||||
|
|
||||||
|
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
|
||||||
|
|
||||||
|
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
|
||||||
}
|
}
|
||||||
|
|
||||||
init_artools_iso(){
|
init_artools_iso(){
|
||||||
@@ -147,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}
|
||||||
|
|
||||||
@@ -167,6 +170,8 @@ load_user_info(){
|
|||||||
|
|
||||||
USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
|
USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}"
|
||||||
prepare_dir "${USERCONFDIR}"
|
prepare_dir "${USERCONFDIR}"
|
||||||
|
|
||||||
|
USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools"
|
||||||
}
|
}
|
||||||
|
|
||||||
# orig_argv=("$0" "$@")
|
# orig_argv=("$0" "$@")
|
||||||
|
@@ -136,12 +136,24 @@ write_servicescfg_conf(){
|
|||||||
printf '%s' "${yaml}"
|
printf '%s' "${yaml}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_unpackfs_conf(){
|
||||||
|
local yaml=$(write_yaml_header)
|
||||||
|
yaml+=$(write_empty_line)
|
||||||
|
yaml+=$(write_yaml_map 0 'unpack')
|
||||||
|
yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs")
|
||||||
|
yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs')
|
||||||
|
yaml+=$(write_yaml_map 4 'destination' '')
|
||||||
|
yaml+=$(write_empty_line)
|
||||||
|
printf '%s' "${yaml}"
|
||||||
|
}
|
||||||
|
|
||||||
configure_calamares(){
|
configure_calamares(){
|
||||||
local mods="$1/etc/calamares/modules"
|
local mods="$1/etc/calamares/modules"
|
||||||
if [[ -d "$mods" ]];then
|
if [[ -d "$mods" ]];then
|
||||||
msg2 "Configuring Calamares"
|
msg2 "Configuring Calamares"
|
||||||
write_users_conf > "$mods"/users.conf
|
write_users_conf > "$mods"/users.conf
|
||||||
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
|
write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf
|
||||||
|
write_unpackfs_conf > "$mods"/unpackfs.conf
|
||||||
sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf
|
sed -e "s|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"
|
||||||
}
|
}
|
||||||
@@ -63,7 +60,7 @@ load_profile(){
|
|||||||
|
|
||||||
PASSWORD=${PASSWORD:-'artix'}
|
PASSWORD=${PASSWORD:-'artix'}
|
||||||
|
|
||||||
ADDGROUPS=${ADDGROUPS:-"video,power,cdrom,network,lp,scanner,wheel,users,log"}
|
ADDGROUPS=${ADDGROUPS:-"video,power,optical,network,lp,scanner,wheel,users,log"}
|
||||||
|
|
||||||
if [[ -z ${SERVICES[@]} ]];then
|
if [[ -z ${SERVICES[@]} ]];then
|
||||||
SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager')
|
SERVICES=('acpid' 'bluetooth' 'cronie' 'cupsd' 'syslog-ng' 'NetworkManager')
|
||||||
|
@@ -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"
|
||||||
|
@@ -23,6 +23,8 @@ create_repo(){
|
|||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "content-type: application/json" \
|
-H "content-type: application/json" \
|
||||||
-d "$json"
|
-d "$json"
|
||||||
|
|
||||||
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_repo(){
|
delete_repo(){
|
||||||
|
@@ -23,14 +23,12 @@ get_remote_head(){
|
|||||||
get_pkg_org(){
|
get_pkg_org(){
|
||||||
local pkg="$1" org= sub=
|
local pkg="$1" org= sub=
|
||||||
case ${pkg} in
|
case ${pkg} in
|
||||||
ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;;
|
ruby-*) org="packagesRuby" ;;
|
||||||
perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;;
|
perl-*) org="packagesPerl" ;;
|
||||||
python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;;
|
python-*|python2-*) org="packagesPython" ;;
|
||||||
python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;;
|
*) sub=${pkg:0:1}; org="packages${sub^^}" ;;
|
||||||
lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;;
|
|
||||||
# lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;;
|
|
||||||
*) org=${pkg:0:1}; echo "packages${org^^}" ;;
|
|
||||||
esac
|
esac
|
||||||
|
echo $org
|
||||||
}
|
}
|
||||||
|
|
||||||
subrepo_push(){
|
subrepo_push(){
|
||||||
@@ -39,14 +37,6 @@ subrepo_push(){
|
|||||||
git subrepo push "$pkg"
|
git subrepo push "$pkg"
|
||||||
}
|
}
|
||||||
|
|
||||||
subrepo_config(){
|
|
||||||
local pkg="$1" org="$2"
|
|
||||||
local gitname=$(get_compliant_name "$pkg")
|
|
||||||
local url=gitea@"${GIT_DOMAIN}":"$org"/"$gitname".git
|
|
||||||
msg2 "Update .gitrepo (%s) [%s]" "$pkg" "$url"
|
|
||||||
git subrepo config "$pkg" remote "$url"
|
|
||||||
}
|
|
||||||
|
|
||||||
subrepo_clean(){
|
subrepo_clean(){
|
||||||
local pkg="$1"
|
local pkg="$1"
|
||||||
msg2 "Clean (%s)" "$pkg"
|
msg2 "Clean (%s)" "$pkg"
|
||||||
@@ -67,9 +57,9 @@ subrepo_clone(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
clone_tree(){
|
clone_tree(){
|
||||||
local timer=$(get_timer) url="$1" tree="$2"
|
local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}"
|
||||||
|
|
||||||
msg "Cloning (%s) ..." "$tree"
|
msg "Cloning %s (%s) ..." "$tree" "$os"
|
||||||
|
|
||||||
git clone $url/$tree.git
|
git clone $url/$tree.git
|
||||||
show_elapsed_time "${FUNCNAME}" "${timer}"
|
show_elapsed_time "${FUNCNAME}" "${timer}"
|
||||||
@@ -87,11 +77,10 @@ has_changes(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
pull_tree(){
|
pull_tree(){
|
||||||
local tree="$1"
|
local tree="$1" local_head="$2" os="${3:-$(get_osname)}"
|
||||||
local local_head=${2:-$(get_local_head)}
|
|
||||||
local remote_head=$(get_remote_head)
|
local remote_head=$(get_remote_head)
|
||||||
|
|
||||||
msg "Checking (%s)" "${tree}"
|
msg "Checking %s (%s)" "${tree}" "$os"
|
||||||
if $(has_changes "${local_head}" "${remote_head}");then
|
if $(has_changes "${local_head}" "${remote_head}");then
|
||||||
git pull origin master
|
git pull origin master
|
||||||
fi
|
fi
|
||||||
|
@@ -69,6 +69,25 @@ patch_pkg(){
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
arch2artix(){
|
||||||
|
local repo="$1" artix=none
|
||||||
|
case "$repo" in
|
||||||
|
core) artix=system ;;
|
||||||
|
extra) artix=world ;;
|
||||||
|
community) artix=galaxy ;;
|
||||||
|
multilib) artix=lib32 ;;
|
||||||
|
staging) artix=goblins ;;
|
||||||
|
testing) artix=gremlins ;;
|
||||||
|
community-staging) artix=galaxy-goblins ;;
|
||||||
|
community-testing) artix=galaxy-gremlins ;;
|
||||||
|
multilib-staging) artix=lib32-goblins ;;
|
||||||
|
multilib-testing) artix=lib32-gremlins ;;
|
||||||
|
kde-unstable) artix=kde-wobble ;;
|
||||||
|
gnome-unstable) artix=gnome-wobble ;;
|
||||||
|
esac
|
||||||
|
echo $artix
|
||||||
|
}
|
||||||
|
|
||||||
find_tree(){
|
find_tree(){
|
||||||
local tree="$1" pkg="$2"
|
local tree="$1" pkg="$2"
|
||||||
local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg")
|
local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg")
|
||||||
@@ -76,56 +95,79 @@ find_tree(){
|
|||||||
echo ${result##*/}
|
echo ${result##*/}
|
||||||
}
|
}
|
||||||
|
|
||||||
find_repo(){
|
arch_repos(){
|
||||||
local pkg="$1" stag="$2" unst="$3" repo=
|
local stag="$1" unst="$2"
|
||||||
local repos=(core extra testing community community-testing multilib multilib-testing)
|
local repos=(core extra testing community community-testing multilib multilib-testing)
|
||||||
|
|
||||||
$stag && repos+=(staging community-staging multilib-staging)
|
$stag && repos+=(staging community-staging multilib-staging)
|
||||||
$unst && repos+=(gnome-unstable kde-unstable)
|
$unst && repos+=(gnome-unstable kde-unstable)
|
||||||
|
|
||||||
for r in ${repos[@]};do
|
echo ${repos[@]}
|
||||||
|
}
|
||||||
|
|
||||||
|
find_repo(){
|
||||||
|
local pkg="$1" stag="$2" unst="$3" repo=
|
||||||
|
|
||||||
|
for r in $(arch_repos "$stag" "$unst");do
|
||||||
[[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64
|
[[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64
|
||||||
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any
|
[[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any
|
||||||
done
|
done
|
||||||
echo $repo
|
echo $repo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_valid_repo(){
|
||||||
|
local src="$1" cases=
|
||||||
|
for r in $(arch_repos true true);do
|
||||||
|
cases=${cases:-}${cases:+|}${r}
|
||||||
|
done
|
||||||
|
eval "case $src in
|
||||||
|
${cases}|trunk) return 0 ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac"
|
||||||
|
}
|
||||||
|
|
||||||
get_cases(){
|
get_cases(){
|
||||||
local pkglist="${DATADIR}/pkglists/$1.list"
|
local pkglist="${SYSCONFDIR}/pkglist.d/$1.list"
|
||||||
|
|
||||||
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
|
local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g"
|
||||||
|
|
||||||
local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean"))
|
local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean"))
|
||||||
|
|
||||||
local cases=
|
local cases=
|
||||||
for p in ${pkgs[@]};do
|
for p in ${pkgs[@]};do
|
||||||
cases=${p:+}${p:-|}${p}
|
cases=${cases:-}${cases:+|}${p}
|
||||||
done
|
done
|
||||||
echo $cases
|
echo $cases
|
||||||
}
|
}
|
||||||
|
|
||||||
get_artix_tree(){
|
get_artix_tree(){
|
||||||
local pkg="$1" artix_tree="${2:-$3}" tree
|
local pkg="$1" artix_tree="${2:-$3}" tree
|
||||||
case $pkg in
|
eval "case $pkg in
|
||||||
$(get_cases kernel)) tree=packages-kernel ;;
|
$(get_cases kernel)) tree=packages-kernel ;;
|
||||||
python-*|python2-*) tree=packages-python ;;
|
$(get_cases python)) tree=packages-python ;;
|
||||||
perl-*) tree=packages-perl ;;
|
$(get_cases perl)) tree=packages-perl ;;
|
||||||
ruby-*) tree=packages-ruby ;;
|
$(get_cases ruby)) tree=packages-ruby ;;
|
||||||
xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;;
|
$(get_cases openrc)) tree=packages-openrc ;;
|
||||||
*-openrc) tree=packages-openrc ;;
|
$(get_cases runit)) tree=packages-runit ;;
|
||||||
*-runit) tree=packages-runit ;;
|
$(get_cases media)) tree=packages-media ;;
|
||||||
qt5-*) tree=packages-qt5 ;;
|
$(get_cases xorg)) tree=packages-xorg ;;
|
||||||
# $(get_cases freedesktop)) tree=packages-desktop ;;
|
$(get_cases qt5)) tree=packages-qt5 ;;
|
||||||
# $(get_cases kde)) tree=packages-kde ;;
|
$(get_cases gtk)) tree=packages-gtk ;;
|
||||||
# $(get_cases gnome)) tree=packages-gnome ;;
|
$(get_cases devel)) tree=packages-devel ;;
|
||||||
|
$(get_cases lxqt)) tree=packages-lxqt ;;
|
||||||
|
$(get_cases cinnamon)) tree=packages-cinnamon ;;
|
||||||
|
$(get_cases kde)) tree=packages-kde ;;
|
||||||
|
$(get_cases gnome)) tree=packages-gnome ;;
|
||||||
|
$(get_cases mate)) tree=packages-mate ;;
|
||||||
*) tree=$artix_tree
|
*) tree=$artix_tree
|
||||||
esac
|
esac"
|
||||||
echo $tree
|
echo $tree
|
||||||
}
|
}
|
||||||
|
|
||||||
get_import_path(){
|
get_import_path(){
|
||||||
local pkg="$1" import_path=
|
local pkg="$1" import_path=
|
||||||
for tree in ${TREE_NAMES_ARCH[@]};do
|
for tree in ${TREE_NAMES_ARCH[@]};do
|
||||||
[[ -d ${TREE_DIR_ARCH}/$tree/$pkg ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg
|
[[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg
|
||||||
done
|
done
|
||||||
echo $import_path
|
echo $import_path
|
||||||
}
|
}
|
||||||
@@ -140,14 +182,6 @@ pkgver_equal() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
is_valid_repo(){
|
|
||||||
local src="$1"
|
|
||||||
case $src in
|
|
||||||
core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;;
|
|
||||||
*) return 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
find_cached_package() {
|
find_cached_package() {
|
||||||
local searchdirs=("$PKGDEST" "$PWD") results=()
|
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||||
local targetname=$1 targetver=$2 targetarch=$3
|
local targetname=$1 targetver=$2 targetarch=$3
|
||||||
|
Reference in New Issue
Block a user