Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
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 |
8
Makefile
8
Makefile
@@ -1,4 +1,4 @@
|
|||||||
VERSION=0.12
|
VERSION=0.13
|
||||||
|
|
||||||
CHROOT_VERSION=0.9
|
CHROOT_VERSION=0.9
|
||||||
|
|
||||||
@@ -40,7 +40,9 @@ PKG_BIN = \
|
|||||||
bin/pkg/buildtree \
|
bin/pkg/buildtree \
|
||||||
bin/pkg/lddd \
|
bin/pkg/lddd \
|
||||||
bin/pkg/finddeps \
|
bin/pkg/finddeps \
|
||||||
bin/pkg/find-libdeps
|
bin/pkg/find-libdeps \
|
||||||
|
bin/pkg/links-add \
|
||||||
|
bin/pkg/sogrep
|
||||||
|
|
||||||
LN_COMMITPKG = \
|
LN_COMMITPKG = \
|
||||||
extrapkg \
|
extrapkg \
|
||||||
@@ -171,6 +173,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
|
||||||
|
@@ -71,9 +71,14 @@ else
|
|||||||
cache_dirs=("$cache_dir")
|
cache_dirs=("$cache_dir")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
|
||||||
|
host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#'))
|
||||||
|
|
||||||
copy_hostconf () {
|
copy_hostconf () {
|
||||||
cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d"
|
cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d"
|
||||||
|
|
||||||
|
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
|
||||||
|
|
||||||
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
[[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf"
|
||||||
|
|
||||||
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
|
[[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf"
|
||||||
@@ -104,6 +109,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
|
||||||
|
@@ -157,12 +157,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
|
||||||
|
@@ -16,14 +16,15 @@
|
|||||||
. @libdir@/artools/util-pkg.sh
|
. @libdir@/artools/util-pkg.sh
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
local pkgsearch=(${pkgname[@]})
|
local pkgsearch=(${pkgname[@]})
|
||||||
if check_option "debug" "y"; then
|
if check_option "debug" "y"; then
|
||||||
pkgsearch+=("$pkgbase-debug")
|
pkgbase=${pkgbase:-${pkgname[@]}}
|
||||||
|
pkgsearch+=("${pkgbase}-debug")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for name in ${pkgsearch[@]}; do
|
for name in ${pkgsearch[@]}; do
|
||||||
@@ -50,7 +51,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
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,6 +68,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#*-}
|
||||||
@@ -71,6 +77,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 ''
|
||||||
@@ -78,12 +85,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 ;;
|
||||||
|
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
|
@@ -339,7 +339,7 @@ main() {
|
|||||||
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
||||||
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
||||||
|
|
||||||
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME
|
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
|
||||||
|
|
||||||
# Canonicalize chrootdir, getting rid of trailing /
|
# Canonicalize chrootdir, getting rid of trailing /
|
||||||
chrootdir=$(readlink -e "$passeddir")
|
chrootdir=$(readlink -e "$passeddir")
|
||||||
@@ -385,9 +385,11 @@ main() {
|
|||||||
sync_chroot "$chrootdir/root" "$copydir" "$copy"
|
sync_chroot "$chrootdir/root" "$copydir" "$copy"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
|
||||||
|
|
||||||
$update_first && chroot-run \
|
$update_first && chroot-run \
|
||||||
-r "${bindmounts_ro[@]}" \
|
-r "${bindmounts_ro[*]}" \
|
||||||
-w "${bindmounts_rw[@]}" \
|
-w "${bindmounts_rw[*]}" \
|
||||||
"$copydir" \
|
"$copydir" \
|
||||||
pacman -Syu --noconfirm
|
pacman -Syu --noconfirm
|
||||||
|
|
||||||
@@ -407,8 +409,6 @@ main() {
|
|||||||
|
|
||||||
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap"
|
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap"
|
||||||
|
|
||||||
bindmounts_rw+=("${PWD}:/startdir" "${SRCDEST}:/srcdest")
|
|
||||||
|
|
||||||
if chroot-run \
|
if chroot-run \
|
||||||
-r "${bindmounts_ro[*]}" \
|
-r "${bindmounts_ro[*]}" \
|
||||||
-w "${bindmounts_rw[*]}" \
|
-w "${bindmounts_rw[*]}" \
|
||||||
|
@@ -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
|
||||||
|
140
bin/pkg/sogrep.in
Normal file
140
bin/pkg/sogrep.in
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# sogrep - find shared library links in an Arch Linux repository.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by Eli Schwartz <eschwartz@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 <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
. @libdir@/artools/util-base.sh
|
||||||
|
|
||||||
|
load_user_info
|
||||||
|
|
||||||
|
load_config "${USERCONFDIR}/artools/artools.conf" || load_config "${SYSCONFDIR}/artools.conf"
|
||||||
|
|
||||||
|
# options
|
||||||
|
REFRESH=0
|
||||||
|
VERBOSE=0
|
||||||
|
|
||||||
|
recache() {
|
||||||
|
local repo verbosity=-s
|
||||||
|
|
||||||
|
(( VERBOSE )) && verbosity=--progress-bar
|
||||||
|
|
||||||
|
for repo in "${ARTIX_REPOS[@]}"; do
|
||||||
|
rm -rf "${SOCACHE_DIR}/${ARCH}/${repo}"
|
||||||
|
mkdir -p "${SOCACHE_DIR}/${ARCH}/${repo}"
|
||||||
|
curl "$verbosity" "${SOLINKS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" | bsdtar -xf - -C "${SOCACHE_DIR}/${ARCH}/${repo}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
search() {
|
||||||
|
local repo=$1 lib=$2 srepos=("${ARTIX_REPOS[@]}")
|
||||||
|
|
||||||
|
if [[ $repo != all ]]; then
|
||||||
|
if ! in_array "${repo}" "${ARTIX_REPOS[@]}"; then
|
||||||
|
echo "${BASH_SOURCE[0]##*/}: unrecognized repo '$repo'"
|
||||||
|
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
srepos=("${repo}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
for repo in "${srepos[@]}"; do
|
||||||
|
local prefix=
|
||||||
|
(( VERBOSE && ${#srepos[@]} > 1 )) && prefix=${repo}/
|
||||||
|
db=${SOCACHE_DIR}/${ARCH}/${repo}/
|
||||||
|
if [[ -d ${db} ]]; then
|
||||||
|
while read -rd '' pkg; do
|
||||||
|
read -r match
|
||||||
|
pkg=${pkg#${db}}
|
||||||
|
pkg="${prefix}${pkg%-*-*/links}"
|
||||||
|
|
||||||
|
if (( VERBOSE )); then
|
||||||
|
printf '%-45s %s\n' "${pkg}" "${match}"
|
||||||
|
else
|
||||||
|
printf '%s\n' "${pkg}"
|
||||||
|
fi
|
||||||
|
done < <(grep -rZ "${lib}" "${db}") | sort -u
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<- _EOF_
|
||||||
|
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] REPO LIBNAME
|
||||||
|
|
||||||
|
Check the soname links database for Artix Linux repositories containing
|
||||||
|
packages linked to a given shared library. If the repository specified
|
||||||
|
is "all", then all repositories will be searched, otherwise only the
|
||||||
|
named repository will be searched.
|
||||||
|
|
||||||
|
If the links database does not exist, it will be downloaded first.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-v, --verbose Show matched links in addition to pkgname
|
||||||
|
-r, --refresh Refresh the links databases
|
||||||
|
-h, --help Show this help text
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
# utility function to resort with multiple repos + no-verbose
|
||||||
|
resort() { sort -u; }
|
||||||
|
|
||||||
|
if (( $# == 0 )); then
|
||||||
|
echo "error: No arguments passed."
|
||||||
|
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OPT_SHORT='vrh'
|
||||||
|
OPT_LONG=('verbose' 'refresh' 'help')
|
||||||
|
if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
set -- "${OPTRET[@]}"
|
||||||
|
|
||||||
|
while :; do
|
||||||
|
case $1 in
|
||||||
|
-v|--verbose)
|
||||||
|
resort() { cat; }
|
||||||
|
VERBOSE=1
|
||||||
|
;;
|
||||||
|
-r|--refresh)
|
||||||
|
REFRESH=1
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift; break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if ! (( ( REFRESH && $# == 0 ) || $# == 2 )); then
|
||||||
|
echo "error: Incorrect number of arguments passed."
|
||||||
|
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( REFRESH )) || [[ ! -d ${SOCACHE_DIR} ]]; then
|
||||||
|
recache
|
||||||
|
(( $# == 2 )) || exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
search "$@"
|
@@ -41,6 +41,9 @@
|
|||||||
# default repos root
|
# default repos root
|
||||||
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
# REPOS_ROOT=${WORKSPACE_DIR}/repos
|
||||||
|
|
||||||
|
# default mirror for sogrep
|
||||||
|
# SOLINKS_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:
|
||||||
|
@@ -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() {
|
||||||
|
@@ -102,6 +102,24 @@ 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"}
|
||||||
|
|
||||||
|
SOLINKS_MIRROR=${SOLINKS_MIRROR:-'http://mirror1.artixlinux.org/repos'}
|
||||||
|
|
||||||
|
SOCACHE_DIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/sogrep"
|
||||||
|
|
||||||
|
DBEXT=${DBEXT:-'xz'}
|
||||||
|
|
||||||
|
LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"}
|
||||||
|
|
||||||
|
PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"}
|
||||||
|
|
||||||
|
[[ -z ${ARTIX_REPOS[@]} ]] && \
|
||||||
|
ARTIX_REPOS=(
|
||||||
|
'goblins' 'gremlins' 'system' 'world'
|
||||||
|
'galaxy-goblins' 'galaxy-gremlins' 'galaxy'
|
||||||
|
'lib32-goblins' 'lib32-gremlns' 'lib32'
|
||||||
|
'gnome-wobble' 'kde-wobble'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
init_artools_iso(){
|
init_artools_iso(){
|
||||||
|
@@ -63,7 +63,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')
|
||||||
|
@@ -61,7 +61,7 @@ subrepo_clone(){
|
|||||||
clone_tree(){
|
clone_tree(){
|
||||||
local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}"
|
local timer=$(get_timer) url="$1" tree="$2" os="${3:-$(get_osname)}"
|
||||||
|
|
||||||
msg "Cloning (%s) ..." "$tree" "$os"
|
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}"
|
||||||
|
@@ -98,14 +98,14 @@ get_cases(){
|
|||||||
|
|
||||||
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 ;;
|
python-*|python2-*) tree=packages-python ;;
|
||||||
perl-*) tree=packages-perl ;;
|
perl-*) tree=packages-perl ;;
|
||||||
@@ -115,18 +115,20 @@ get_artix_tree(){
|
|||||||
*-runit) tree=packages-runit ;;
|
*-runit) tree=packages-runit ;;
|
||||||
qt5-*) tree=packages-qt5 ;;
|
qt5-*) tree=packages-qt5 ;;
|
||||||
lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;;
|
lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;;
|
||||||
|
*) tree=$artix_tree
|
||||||
|
esac"
|
||||||
|
echo $tree
|
||||||
|
|
||||||
# $(get_cases freedesktop)) tree=packages-desktop ;;
|
# $(get_cases freedesktop)) tree=packages-desktop ;;
|
||||||
# $(get_cases kde)) tree=packages-kde ;;
|
# $(get_cases kde)) tree=packages-kde ;;
|
||||||
# $(get_cases gnome)) tree=packages-gnome ;;
|
# $(get_cases gnome)) tree=packages-gnome ;;
|
||||||
*) tree=$artix_tree
|
|
||||||
esac
|
|
||||||
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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user