forked from artix/artools
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
d333c245c0 | |||
4a650f00d7 | |||
1a250c2167 |
5
Makefile
5
Makefile
@@ -1,4 +1,4 @@
|
||||
VERSION=0.17
|
||||
VERSION=0.18
|
||||
|
||||
CHROOT_VERSION=0.10
|
||||
|
||||
@@ -45,7 +45,8 @@ PKG_BIN = \
|
||||
bin/pkg/checkpkg \
|
||||
bin/pkg/finddeps \
|
||||
bin/pkg/find-libdeps \
|
||||
bin/pkg/batchpkg
|
||||
bin/pkg/batchpkg \
|
||||
bin/pkg/signpkg
|
||||
|
||||
LN_COMMITPKG = \
|
||||
extrapkg \
|
||||
|
@@ -30,6 +30,7 @@ base_devel=('base-devel')
|
||||
usage() {
|
||||
echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]"
|
||||
echo " -r <dir> Create chroots in this directory"
|
||||
echo " -d <dir> Destination repo chroot"
|
||||
echo ' -c Recreate the chroot before building'
|
||||
echo ' -m Major rebuild'
|
||||
echo ' -N Disable check() function'
|
||||
@@ -43,11 +44,12 @@ usage() {
|
||||
|
||||
orig_argv=("$0" "$@")
|
||||
|
||||
opts='hcCNmr:'
|
||||
opts='hcCNmr:d:'
|
||||
|
||||
while getopts "${opts}" arg; do
|
||||
case "${arg}" in
|
||||
r) CHROOTS_PKG="$OPTARG" ;;
|
||||
d) repo="$OPTARG" ;;
|
||||
c) create_first=true ;;
|
||||
m) rebuild=true ;;
|
||||
C) is_checkpkg=true; mkchrootpkg_args+=(-C) ;;
|
||||
|
@@ -18,6 +18,68 @@ shopt -s extglob
|
||||
|
||||
load_makepkg_config
|
||||
|
||||
pkgver_equal() {
|
||||
if [[ $1 = *-* && $2 = *-* ]]; then
|
||||
# if both versions have a pkgrel, then they must be an exact match
|
||||
[[ $1 = "$2" ]]
|
||||
else
|
||||
# otherwise, trim any pkgrel and compare the bare version.
|
||||
[[ ${1%%-*} = "${2%%-*}" ]]
|
||||
fi
|
||||
}
|
||||
|
||||
find_cached_package() {
|
||||
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||
local targetname=$1 targetver=$2 targetarch=$3
|
||||
local dir pkg pkgbasename name ver rel arch r results
|
||||
|
||||
for dir in "${searchdirs[@]}"; do
|
||||
[[ -d $dir ]] || continue
|
||||
|
||||
for pkg in "$dir"/*.pkg.tar?(.!(sig|*.*)); do
|
||||
[[ -f $pkg ]] || continue
|
||||
|
||||
# avoid adding duplicates of the same inode
|
||||
for r in "${results[@]}"; do
|
||||
[[ $r -ef $pkg ]] && continue 2
|
||||
done
|
||||
|
||||
# split apart package filename into parts
|
||||
pkgbasename=${pkg##*/}
|
||||
pkgbasename=${pkgbasename%.pkg.tar*}
|
||||
|
||||
arch=${pkgbasename##*-}
|
||||
pkgbasename=${pkgbasename%-"$arch"}
|
||||
|
||||
rel=${pkgbasename##*-}
|
||||
pkgbasename=${pkgbasename%-"$rel"}
|
||||
|
||||
ver=${pkgbasename##*-}
|
||||
name=${pkgbasename%-"$ver"}
|
||||
|
||||
if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
|
||||
pkgver_equal "$targetver" "$ver-$rel"; then
|
||||
results+=("$pkg")
|
||||
fi
|
||||
done
|
||||
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
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<- _EOF_
|
||||
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS]
|
||||
|
@@ -16,35 +16,11 @@
|
||||
|
||||
prepare_artools
|
||||
|
||||
find_cached_pkgfile() {
|
||||
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||
local pkg="$1"
|
||||
local search=${pkg%.*}
|
||||
for dir in "${searchdirs[@]}"; do
|
||||
[[ -d $dir ]] || continue
|
||||
results+=$(find "$dir" -type f -name "$search.*" ! -path '*.sig' ! -path '*.log')
|
||||
done
|
||||
case ${#results[*]} in
|
||||
0)
|
||||
return 1
|
||||
;;
|
||||
1)
|
||||
printf '%s\n' "${results[0]}"
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
error 'Multiple packages found:'
|
||||
printf '\t%s\n' "${results[@]}" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_pkgbasename(){
|
||||
local pkg="$1"
|
||||
local pkgbasename name ver rel arch
|
||||
|
||||
pkgbasename=${pkg%.pkg.tar.?z}
|
||||
pkgbasename=${pkg%.pkg.tar*}
|
||||
arch=${pkgbasename##*-}
|
||||
pkgbasename=${pkgbasename%-"$arch"}
|
||||
|
||||
@@ -57,86 +33,42 @@ get_pkgbasename(){
|
||||
echo $name
|
||||
}
|
||||
|
||||
update_repo2(){
|
||||
local repo="$1"
|
||||
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
|
||||
|
||||
for name in ${passfiles[@]}; do
|
||||
if pkgfile=$(find_cached_pkgfile "$name");then
|
||||
info "Found: %s" "$name"
|
||||
if ${add_pkg};then
|
||||
local action='add'
|
||||
packages+=("$name")
|
||||
if ${sign_pkg};then
|
||||
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
|
||||
signfile ${pkgfile}
|
||||
fi
|
||||
ln -sf ${pkgfile}{,.sig} $repo_path/
|
||||
elif ${del_pkg};then
|
||||
local action='remove'
|
||||
packages+=("$(get_pkgbasename "$name")")
|
||||
[[ -e $repo_path/$name ]] && rm $repo_path/$name
|
||||
[[ -e $repo_path/$name.sig ]] && rm $repo_path/$name.sig
|
||||
fi
|
||||
fi
|
||||
done
|
||||
cd $repo_path
|
||||
if [[ -n $action ]]; then
|
||||
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
|
||||
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
|
||||
add(){
|
||||
packages+=("$pkg")
|
||||
if [[ -e "${pkgfile}" ]]; then
|
||||
action='add'
|
||||
ln -sf "${pkgfile}"{,.sig} "$repo_path"/
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
update_repo(){
|
||||
local repo="$1" pkgfile ver
|
||||
local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=()
|
||||
|
||||
. PKGBUILD
|
||||
|
||||
local pkgsearch=(${pkgname[@]})
|
||||
if check_option "debug" "y"; then
|
||||
pkgbase=${pkgbase:-${pkgname[@]}}
|
||||
pkgsearch+=("${pkgbase}-debug")
|
||||
remove(){
|
||||
packages+=("$(get_pkgbasename "$pkg")")
|
||||
if [[ -e "$repo_path"/"$pkg" ]]; then
|
||||
action='remove'
|
||||
rm "$repo_path"/"$pkg"
|
||||
fi
|
||||
[[ -e "$repo_path"/"$pkg".sig ]] && rm "$repo_path"/"$pkg".sig
|
||||
}
|
||||
|
||||
for name in ${pkgsearch[@]}; do
|
||||
pkgarch=$(get_pkg_arch "$name")
|
||||
ver=$(get_full_version)
|
||||
if pkgfile=$(find_cached_package "$name" "$ver" "$pkgarch");then
|
||||
local pkg=${pkgfile##*/}
|
||||
info "Found: %s" "$pkg"
|
||||
if ${add_pkg};then
|
||||
local action='add'
|
||||
packages+=("$pkg")
|
||||
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/$pkg ]] && rm $repo_path/$pkg
|
||||
[[ -e $repo_path/$pkg.sig ]] && rm $repo_path/$pkg.sig
|
||||
fi
|
||||
repo_action(){
|
||||
local packages=() action= func="$1"
|
||||
for pkg in ${passfiles[@]}; do
|
||||
if pkgfile=$(find_cached_pkgfile "$pkg");then
|
||||
msg "Found: %s" "${pkgfile}"
|
||||
"$func"
|
||||
fi
|
||||
done
|
||||
cd $repo_path
|
||||
if [[ -n $action ]]; then
|
||||
repo-$action -R $repo.${PKGDBEXT} ${packages[@]}
|
||||
${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]}
|
||||
if [[ -n "$action" ]]; then
|
||||
repo-"$action" -R "${dest_repo}"."${PKGDBEXT}" "${packages[@]}"
|
||||
${linksdb} && links-"$action" "${dest_repo}"."${LINKSDBEXT}" "${packages[@]}"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
load_makepkg_config
|
||||
|
||||
add_pkg=false
|
||||
del_pkg=false
|
||||
sign_pkg=false
|
||||
rm_pkg=false
|
||||
linksdb=false
|
||||
|
||||
cmd=${0##*/}
|
||||
@@ -144,24 +76,24 @@ dest_repo=${cmd#*-}
|
||||
|
||||
usage() {
|
||||
echo "Usage: ${cmd} [options]"
|
||||
echo ' -d <dest> Destination repository'
|
||||
echo ' -a Add package(s) to repository'
|
||||
echo ' -r Remove package(s) from repository'
|
||||
echo ' -l Use links db'
|
||||
echo ' -s Sign package(s)'
|
||||
echo ' -h This help'
|
||||
echo ''
|
||||
echo ''
|
||||
exit $1
|
||||
}
|
||||
|
||||
opts='arlsh'
|
||||
opts='arlhd:'
|
||||
|
||||
while getopts "${opts}" arg; do
|
||||
case "${arg}" in
|
||||
a) add_pkg=true; del_pkg=false ;;
|
||||
r) del_pkg=true; add_pkg=false ;;
|
||||
d) dest_repo="$OPTARG" ;;
|
||||
a) add_pkg=true; rm_pkg=false ;;
|
||||
r) rm_pkg=true; add_pkg=false ;;
|
||||
l) linksdb=true ;;
|
||||
s) sign_pkg=true ;;
|
||||
h|?) usage 0 ;;
|
||||
*) echo "invalid argument '${arg}'"; usage 1 ;;
|
||||
esac
|
||||
@@ -173,8 +105,13 @@ passfiles="$@"
|
||||
|
||||
prepare_dir "${REPOS_ROOT}"
|
||||
|
||||
repo_path=${REPOS_ROOT}/${dest_repo}/os/${ARCH}
|
||||
|
||||
if [[ -n ${passfiles[@]} ]]; then
|
||||
update_repo2 "${dest_repo}"
|
||||
else
|
||||
update_repo "${dest_repo}"
|
||||
if ${add_pkg}; then
|
||||
repo_action add
|
||||
fi
|
||||
if ${rm_pkg}; then
|
||||
repo_action remove
|
||||
fi
|
||||
fi
|
||||
|
29
bin/pkg/signpkg.in
Normal file
29
bin/pkg/signpkg.in
Normal file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2018-19 artoo@artixlinux.org
|
||||
# Copyright (C) 2018 Artix Linux Developers
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
. @libdir@/artools/util-pkg.sh
|
||||
|
||||
prepare_artools
|
||||
|
||||
load_makepkg_config
|
||||
|
||||
passfiles="$@"
|
||||
|
||||
for name in ${passfiles[@]}; do
|
||||
if pkgfile=$(find_cached_pkgfile "$name");then
|
||||
msg "Found: %s" "${pkgfile}"
|
||||
[[ -e ${pkgfile}.sig ]] && rm ${pkgfile}.sig
|
||||
[[ -e ${pkgfile} ]] && signfile ${pkgfile}
|
||||
fi
|
||||
done
|
@@ -36,7 +36,9 @@ add_svc_runit(){
|
||||
add_svc_s6(){
|
||||
local mnt="$1" names="$2" valid="" rlvl="${3:-default}"
|
||||
for svc in $names; do
|
||||
if [[ -d $mnt/etc/s6/sv/$svc ]]; then
|
||||
error=false
|
||||
chroot $mnt s6-rc-db -c /etc/s6/rc/compiled type $svc &> /dev/null || error=true
|
||||
if [ $? == 0 ] && [[ $error == false ]]; then
|
||||
msg2 "Setting %s ..." "$svc"
|
||||
valid=${valid:-}${valid:+' '}${svc}
|
||||
fi
|
||||
|
@@ -33,7 +33,7 @@ subrepo_init() {
|
||||
subrepo_push(){
|
||||
local pkg="$1"
|
||||
msg2 "Subrepo push (%s)" "$pkg"
|
||||
git subrepo push "$pkg"
|
||||
git subrepo push "$pkg" || die "%s push failed" "$pkg"
|
||||
}
|
||||
|
||||
subrepo_clean(){
|
||||
|
@@ -46,52 +46,14 @@ find_pkg(){
|
||||
echo $result
|
||||
}
|
||||
|
||||
pkgver_equal() {
|
||||
if [[ $1 = *-* && $2 = *-* ]]; then
|
||||
# if both versions have a pkgrel, then they must be an exact match
|
||||
[[ $1 = "$2" ]]
|
||||
else
|
||||
# otherwise, trim any pkgrel and compare the bare version.
|
||||
[[ ${1%%-*} = "${2%%-*}" ]]
|
||||
fi
|
||||
}
|
||||
|
||||
find_cached_package() {
|
||||
find_cached_pkgfile() {
|
||||
local searchdirs=("$PKGDEST" "$PWD") results=()
|
||||
local targetname=$1 targetver=$2 targetarch=$3
|
||||
local dir pkg pkgbasename name ver rel arch r results
|
||||
|
||||
local pkg="$1"
|
||||
for dir in "${searchdirs[@]}"; do
|
||||
[[ -d $dir ]] || continue
|
||||
|
||||
for pkg in "$dir"/*.pkg.tar?(.!(sig|*.*)); do
|
||||
[[ -f $pkg ]] || continue
|
||||
|
||||
# avoid adding duplicates of the same inode
|
||||
for r in "${results[@]}"; do
|
||||
[[ $r -ef $pkg ]] && continue 2
|
||||
done
|
||||
|
||||
# split apart package filename into parts
|
||||
pkgbasename=${pkg##*/}
|
||||
pkgbasename=${pkgbasename%.pkg.tar*}
|
||||
|
||||
arch=${pkgbasename##*-}
|
||||
pkgbasename=${pkgbasename%-"$arch"}
|
||||
|
||||
rel=${pkgbasename##*-}
|
||||
pkgbasename=${pkgbasename%-"$rel"}
|
||||
|
||||
ver=${pkgbasename##*-}
|
||||
name=${pkgbasename%-"$ver"}
|
||||
|
||||
if [[ $targetname = "$name" && $targetarch = "$arch" ]] &&
|
||||
pkgver_equal "$targetver" "$ver-$rel"; then
|
||||
results+=("$pkg")
|
||||
fi
|
||||
done
|
||||
#results+=$(find "$dir" -type f -name "$pkg" ! -path '*.sig' ! -path '*.log')
|
||||
[[ -e $dir/$pkg ]] && results+=($dir/$pkg)
|
||||
done
|
||||
|
||||
case ${#results[*]} in
|
||||
0)
|
||||
return 1
|
||||
|
Reference in New Issue
Block a user