|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
#
|
|
|
|
# repo.sh adds the archzfs packages to a specified repository.
|
|
|
|
#
|
|
|
|
|
|
|
|
source ./lib.sh
|
|
|
|
source ./conf.sh
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
trap 'trap_abort' INT QUIT TERM HUP
|
|
|
|
trap 'trap_exit' EXIT
|
|
|
|
|
|
|
|
DRY_RUN=0 # Show commands only. Don't do anything.
|
|
|
|
AZB_REPO="" # The destination repo for the packages
|
|
|
|
AZB_MODE_GIT=0
|
|
|
|
AZB_MODE_LTS=0
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
echo "repo.sh - Adds the compiled packages to the archzfs repo."
|
|
|
|
echo
|
|
|
|
echo "Usage: repo.sh [options] [mode] [repo] [package [...]]"
|
|
|
|
echo
|
|
|
|
echo "Options:"
|
|
|
|
echo
|
|
|
|
echo " -h: Show help information."
|
|
|
|
echo " -n: Dryrun; Output commands, but don't do anything."
|
|
|
|
echo " -d: Show debug info."
|
|
|
|
echo
|
|
|
|
echo "Modes:"
|
|
|
|
echo
|
|
|
|
echo " git Use the git packages."
|
|
|
|
echo " lts Use the lts packages."
|
|
|
|
echo
|
|
|
|
echo "Example Usage:"
|
|
|
|
echo
|
|
|
|
echo " repo.sh git core :: Add git packages in the current directory to the core repo."
|
|
|
|
echo " repo.sh lts core -n -d :: Show output commands and debug info."
|
|
|
|
echo " repo.sh git core package.tar.xz :: Add package.tar.xz to the core repo."
|
|
|
|
echo " repo.sh gts core *.tar.xz :: Add *.tar.xz to the core repo."
|
|
|
|
}
|
|
|
|
|
|
|
|
ARGS=("$@")
|
|
|
|
for (( a = 0; a < $#; a++ )); do
|
|
|
|
if [[ ${ARGS[$a]} == "git" ]]; then
|
|
|
|
AZB_MODE_GIT=1
|
|
|
|
elif [[ ${ARGS[$a]} == "lts" ]]; then
|
|
|
|
AZB_MODE_LTS=1
|
|
|
|
elif [[ ${ARGS[$a]} == "core" ]]; then
|
|
|
|
AZB_REPO="demz-repo-core"
|
|
|
|
elif [[ ${ARGS[$a]} == "community" ]]; then
|
|
|
|
AZB_REPO="demz-repo-community"
|
|
|
|
elif [[ ${ARGS[$a]} == "testing" ]]; then
|
|
|
|
AZB_REPO="demz-repo-testing"
|
|
|
|
elif [[ ${ARGS[$a]} == "archiso" ]]; then
|
|
|
|
AZB_REPO="demz-repo-archiso"
|
|
|
|
elif [[ ${ARGS[$a]} == "-h" ]]; then
|
|
|
|
usage;
|
|
|
|
exit 0;
|
|
|
|
elif [[ ${ARGS[$a]} == "-n" ]]; then
|
|
|
|
DRY_RUN=1
|
|
|
|
elif [[ ${ARGS[$a]} == "-d" ]]; then
|
|
|
|
DEBUG=1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
usage;
|
|
|
|
exit 0;
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $AZB_MODE_GIT == 0 && $AZB_MODE_LTS == 0 ]]; then
|
|
|
|
echo -e "\n"
|
|
|
|
error "A mode must be selected!"
|
|
|
|
echo -e "\n"
|
|
|
|
usage;
|
|
|
|
exit 0;
|
|
|
|
fi
|
|
|
|
|
|
|
|
[[ $AZB_MODE_GIT == 1 ]] && AZB_KERNEL_VERSION=$AZB_GIT_KERNEL_VERSION || AZB_KERNEL_VERSION=$AZB_LTS_KERNEL_VERSION
|
|
|
|
|
|
|
|
msg "repo.sh started..."
|
|
|
|
|
|
|
|
if [[ $AZB_REPO == "" ]]; then
|
|
|
|
error "No destination repo specified!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# The abs path to the repo
|
|
|
|
AZB_REPO_TARGET=$AZB_REPO_BASEPATH/$AZB_REPO
|
|
|
|
|
|
|
|
debug "DRY_RUN: "$DRY_RUN
|
|
|
|
debug "AZB_REPO: "$AZB_REPO
|
|
|
|
debug "AZB_REPO_TARGET: $AZB_REPO_TARGET"
|
|
|
|
debug "AZB_KERNEL_VERSION: $AZB_KERNEL_VERSION"
|
|
|
|
|
|
|
|
# A list of packages to install. Pulled from the command line.
|
|
|
|
pkgs=()
|
|
|
|
|
|
|
|
# Extract any packages from the arguments passed to the script
|
|
|
|
for arg in "$@"; do
|
|
|
|
if [[ $arg =~ pkg.tar.xz$ ]]; then
|
|
|
|
pkgs+=("${pkgs[@]}" $arg)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
[[ $AZB_MODE_GIT == 1 ]] && path_glob="*-git" || path_glob="*-lts"
|
|
|
|
|
|
|
|
# Get the local packages if no packages were passed to the script
|
|
|
|
if [[ "${#pkgs[@]}" -eq 0 ]]; then
|
|
|
|
# Get packages from the backup directory if the repo is demz-repo-archiso
|
|
|
|
if [[ $AZB_REPO == "demz-repo-archiso" ]]; then
|
|
|
|
fcmd_out=$(find ${AZB_REPO_BASEPATH}/demz-repo-core -iname "*${AZB_KERNEL_ARCHISO_VERSION}*.pkg.tar.xz")
|
|
|
|
if [[ $fcmd_out == "" ]]; then
|
|
|
|
fcmd_out=$(find ${AZB_PACKAGE_BACKUP_DIR} -iname "*${AZB_KERNEL_ARCHISO_VERSION}*.pkg.tar.xz")
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
fcmd_out=$(find ${path_glob} -iname "*${AZB_KERNEL_VERSION}*.pkg.tar.xz")
|
|
|
|
fi
|
|
|
|
for pkg in $fcmd_out; do
|
|
|
|
pkgs+=($pkg)
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $AZB_REPO != "" ]]; then
|
|
|
|
msg "Creating a list of packages to add..."
|
|
|
|
|
|
|
|
# A list of packages to add. The strings are in the form of
|
|
|
|
# "name;pkg.tar.xz;repo_path". There must be no spaces.
|
|
|
|
pkg_list=()
|
|
|
|
|
|
|
|
# A list of package sources to move
|
|
|
|
pkg_src_list=()
|
|
|
|
|
|
|
|
[[ $AZB_MODE_GIT == 1 ]] && full_kernel_git_version || full_kernel_lts_version
|
|
|
|
[[ $AZB_REPO == "demz-repo-archiso" ]] && full_kernel_archiso_version
|
|
|
|
|
|
|
|
for pkg in ${pkgs[@]}; do
|
|
|
|
|
|
|
|
arch=$(package_arch_from_path $pkg)
|
|
|
|
name=$(package_name_from_path $pkg)
|
|
|
|
vers=$(package_version_from_path $pkg)
|
|
|
|
|
|
|
|
version_match=0
|
|
|
|
|
|
|
|
# Use a specific version incase of archiso
|
|
|
|
if [[ $AZB_REPO == "demz-repo-archiso" ]]; then
|
|
|
|
debug "Expect version: ${AZB_ZOL_VERSION}.*${AZB_KERNEL_ARCHISO_VERSION_CLEAN}-${AZB_ARCHISO_PKGREL}"
|
|
|
|
[[ $vers =~ ${AZB_ZOL_VERSION}.*${AZB_KERNEL_ARCHISO_VERSION_CLEAN}-${AZB_ARCHISO_PKGREL} ]] && version_match=1
|
|
|
|
elif [[ $AZB_REPO == "demz-repo-core" && $AZB_MODE_GIT == 1 ]]; then
|
|
|
|
[[ $vers =~ ${AZB_ZOL_VERSION}.*${AZB_GIT_KERNEL_X64_VERSION_CLEAN}-${AZB_GIT_PKGREL} ]] && version_match=1
|
|
|
|
elif [[ $AZB_REPO == "demz-repo-core" && $AZB_MODE_LTS == 1 ]]; then
|
|
|
|
[[ $vers =~ ${AZB_ZOL_VERSION}.*${AZB_LTS_KERNEL_X64_VERSION_CLEAN}-${AZB_LTS_PKGREL} ]] && version_match=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $version_match -eq 0 ]]; then
|
|
|
|
debug "Version mismatch!"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $arch == "any" ]]; then
|
|
|
|
repos=`realpath $AZB_REPO_TARGET/{x86_64,i686}`
|
|
|
|
for repo in $repos; do
|
|
|
|
debug "Package: pkgname: $name\n\t\t pkgver: $vers\n\t\t pkgpath: $pkg\n\t\t pkgdest: $AZB_REPO_TARGET/$arch"
|
|
|
|
# Each index is [name, version, pkgpath, pkgdest]
|
|
|
|
pkg_list+=("$name;$vers;$pkg;$repo")
|
|
|
|
done
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
debug "Using: pkgname: $name\n\t\t pkgver: $vers\n\t\t pkgpath: $pkg\n\t\t pkgdest: $AZB_REPO_TARGET/$arch"
|
|
|
|
pkg_list+=("$name;$vers;$pkg;$AZB_REPO_TARGET/$arch")
|
|
|
|
|
|
|
|
if [[ $AZB_REPO == "demz-repo-archiso" ]]; then
|
|
|
|
litem="$AZB_REPO_BASEPATH/demz-repo-core/$arch/$name-$vers.src.tar.gz;$AZB_REPO_TARGET/$arch"
|
|
|
|
else
|
|
|
|
litem="$name/$name-$vers.src.tar.gz;$AZB_REPO_TARGET/$arch"
|
|
|
|
fi
|
|
|
|
debug "Source: srcname: $name-$vers.src.tar.gz\n\t\t srcdest: $AZB_REPO_TARGET/$arch"
|
|
|
|
pkg_src_list+=($litem)
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ ${#pkg_list[@]} == 0 ]]; then
|
|
|
|
error "No packages to process!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
exist_pkg_mv_list=()
|
|
|
|
new_pkg_cp_list=()
|
|
|
|
pkg_add_list=()
|
|
|
|
src_mv_list=()
|
|
|
|
|
|
|
|
for ipkg in ${pkg_list[@]}; do
|
|
|
|
IFS=';' read -a pkgopt <<< "$ipkg"
|
|
|
|
|
|
|
|
name="${pkgopt[0]}"
|
|
|
|
vers="${pkgopt[1]}"
|
|
|
|
pkgp="${pkgopt[2]}"
|
|
|
|
repo="${pkgopt[3]}"
|
|
|
|
|
|
|
|
msg2 "Processing $name-$vers to $repo"
|
|
|
|
[[ ! -d $repo ]] && run_cmd "mkdir -p $repo"
|
|
|
|
|
|
|
|
# Move the old packages to backup
|
|
|
|
for x in $(find $repo -type f -iname "${name}*.pkg.tar.xz"); do
|
|
|
|
ename=$(package_name_from_path $x)
|
|
|
|
evers=$(package_version_from_path $x)
|
|
|
|
if [[ $ename == $name && $evers != $vers ]]; then
|
|
|
|
# The '*' globs the signatures and package sources
|
|
|
|
epkg="$repo/$ename-${evers}*"
|
|
|
|
exist_pkg_mv_list+=($epkg)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# The * is to catch the signature
|
|
|
|
new_pkg_cp_list+=("$pkgp*;$repo")
|
|
|
|
bname=$(basename $pkgp)
|
|
|
|
pkg_add_list+=("$repo/$bname;$repo")
|
|
|
|
done
|
|
|
|
|
|
|
|
# Build mv list with unique source packages since i686 and x86_64 both have
|
|
|
|
# identical source packages. If we attempt to move with identical file
|
|
|
|
# names, cp will fail with the "cp: will not overwrite just-created" error.
|
|
|
|
exist_pkg_mv_list_uniq=()
|
|
|
|
for ((i = 0; i < ${#exist_pkg_mv_list[@]}; i++)); do
|
|
|
|
if [[ ${exist_pkg_mv_list[$i]} != *src.tar.gz ]]; then
|
|
|
|
exist_pkg_mv_list_uniq+=(${exist_pkg_mv_list[$i]})
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
if [[ ${exist_pkg_mv_list[$i]} == *x86_64* ]]; then
|
|
|
|
exist_pkg_mv_list_uniq+=(${exist_pkg_mv_list[$i]})
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
msg "Performing file operations..."
|
|
|
|
|
|
|
|
if [[ ${#exist_pkg_mv_list_uniq[@]} -gt 0 && $AZB_REPO != "demz-repo-archiso" ]]; then
|
|
|
|
msg2 "Copy old packages and sources to backup directory"
|
|
|
|
run_cmd "cp -f ${exist_pkg_mv_list_uniq[*]} $AZB_PACKAGE_BACKUP_DIR/"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Remove the existing packages in the repo path
|
|
|
|
run_cmd "rm -f ${exist_pkg_mv_list[*]}"
|
|
|
|
|
|
|
|
for arch in "i686" "x86_64"; do
|
|
|
|
|
|
|
|
msg "Copying the new $arch packages to the repo..."
|
|
|
|
|
|
|
|
cp_list="" # The packages to copy in one string
|
|
|
|
ra_list="" # The packages to add to the repo in one string
|
|
|
|
repo="" # The destination repo
|
|
|
|
|
|
|
|
# Create the command file lists from the arrays
|
|
|
|
for pkg in "${new_pkg_cp_list[@]}"; do
|
|
|
|
if [[ "$pkg" == *$arch* ]]; then
|
|
|
|
cp_list="$cp_list "$(echo "$pkg" | cut -d \; -f 1)
|
|
|
|
repo=$(echo "$pkg" | cut -d \; -f 2)
|
|
|
|
ra=$(echo "$pkg" | cut -d \; -f 1 | xargs basename)
|
|
|
|
ra_list="$ra_list $repo/${ra%?}"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ $cp_list == "" ]]; then
|
|
|
|
warning "No packages to copy!"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
run_cmd "cp -f $cp_list $repo/"
|
|
|
|
|
|
|
|
run_cmd "repo-add -k $AZB_GPG_SIGN_KEY -s -v -f $repo/${AZB_REPO}.db.tar.xz $ra_list"
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
|
|
error "An error occurred adding the package to the repo!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
# Copy package sources
|
|
|
|
msg "Copy package sources"
|
|
|
|
for arch in "i686" "x86_64"; do
|
|
|
|
src_cp_list=()
|
|
|
|
for src in "${pkg_src_list[@]}"; do
|
|
|
|
if [[ "$src" == *$arch* ]]; then
|
|
|
|
src_cp_list="$src_cp_list "$(echo "$src" | cut -d \; -f 1)
|
|
|
|
repo=$(echo "$src" | cut -d \; -f 2)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
run_cmd "cp $src_cp_list $repo/"
|
|
|
|
if [[ $arch == "x86_64" && $AZB_REPO != "demz-repo-archiso" ]]; then
|
|
|
|
# Delete the package sources
|
|
|
|
run_cmd "rm $src_cp_list"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|