#!/bin/bash # # repo.sh adds the archzfs packages to the archzfs repository or archzfs-testing repository # args=("$@") script_name=$(basename $0) script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" repo_name="" # The destination repo for the packages package_list=() # A list of packages to add. Array items are in the form of "name;pkg.tar.xz;repo_path". package_src_list=() # A list of package sources to move package_exist_list=() if ! source ${script_dir}/lib.sh; then echo "!! ERROR !! -- Could not load lib.sh!" exit 155 fi source_safe "${script_dir}/conf.sh" usage() { echo "${script_name} - Adds the compiled packages to the archzfs repo." echo echo "Usage: ${script_name} [options] (mode) (repo)" 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 for ml in "${mode_list[@]}"; do mn=$(echo ${ml} | cut -f2 -d:) md=$(echo ${ml} | cut -f3 -d:) echo -e " ${mn} ${md}" done echo echo "Repository target:" echo echo " azfs Use the archzfs repo. Used by default." echo " test Use the archzfs-testing repo." echo echo "Example Usage:" echo echo " ${script_name} lts azfs -n -d :: Show output commands and debug info." exit 155 } generate_mode_list if [[ $# -lt 1 ]]; then usage fi for (( a = 0; a < $#; a++ )); do if [[ ${args[$a]} == "azfs" ]]; then repo_name="archzfs" elif [[ ${args[$a]} == "test" ]]; then # TODO: NOT IMPLMENTED YET repo_name="archzfs-testing" elif [[ ${args[$a]} == "-n" ]]; then dry_run=1 elif [[ ${args[$a]} == "-d" ]]; then debug_flag=1 elif [[ ${args[$a]} == "-h" ]]; then usage else check_mode "${args[$a]}" debug "have mode '${mode}'" fi done if [[ $# -lt 1 ]]; then usage fi if [[ ${mode} == "" ]]; then echo error "A mode must be selected!" usage fi if [[ ${repo_name} == "" ]]; then error "No destination repo specified!" exit 155 fi repo_package_list() { msg "Generating a list of packages to add..." debug_print_array "pkg_list" "${pkg_list[@]}" local pkgs=() # Get packages from the backup directory path="packages/${kernel_name}/{$(printf '%s,' ${pkg_list[@]} | cut -d ',' -f 1-${#pkg_list[@]})}/" run_cmd_show_and_capture_output_no_dry_run "find ${path} -iname '*${kernel_version_full_pkgver}*.pkg.tar.xz'" for pkg in ${run_cmd_output}; do pkgs+=(${pkg}) done for pkg in ${pkgs[@]}; do arch=$(package_arch_from_path ${pkg}) name=$(package_name_from_path ${pkg}) vers=$(package_version_from_path ${pkg}) match="${zol_version::-1}.*${kernel_version_full_pkgver}-${zfs_pkgrel}" debug "Version match check: arch: ${arch} name: ${name} vers: ${vers} vers_match: ${match}" if ! [[ ${vers} =~ ^${match} ]]; then debug "Version mismatch!" continue fi debug "Using: pkgname: ${name} pkgver: ${vers} pkgpath: ${pkg} pkgdest: ${repo_target}/${arch}" package_list+=("${name};${vers};${pkg};${repo_target}/${arch}") package_src_list+=("packages/${kernel_name}/${name}/${name}-${vers}.src.tar.gz") done debug_print_array "package_list" ${package_list[@]} } repo_package_backup() { run_cmd_show_and_capture_output_no_dry_run "find ${repo_target} -type f -iname '${name}*.pkg.tar.xz'" for x in ${run_cmd_output}; 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_name}/${ename}-${evers}*" package_exist_list+=(${epkg}) fi done debug_print_array "package_exist_list" ${package_exist_list[@]} } repo_add() { if [[ ${#package_list[@]} == 0 ]]; then error "No packages to process!" exit 1 fi local pkg_cp_list=() local pkg_add_list=() local dest="" local arch="x86_64" for ipkg in ${package_list[@]}; do IFS=';' read -a pkgopt <<< "${ipkg}" name="${pkgopt[0]}" vers="${pkgopt[1]}" pkgp="${pkgopt[2]}" dest="${pkgopt[3]}" msg2 "Processing package ${name}-${vers} to ${dest}" [[ ! -d ${dest} ]] && run_cmd "mkdir -p ${dest}" debug "name: ${name} vers: ${vers} pkgp: ${pkgp} dest: ${dest}" # The * is to catch the signature pkg_cp_list+=("${pkgp}*") bname=$(basename ${pkgp}) pkg_add_list+=("${dest}/${bname}") done debug_print_array "pkg_cp_list" "${pkg_cp_list[@]}" debug_print_array "pkg_add_list" "${pkg_add_list[@]}" msg "Copying the new ${arch} packages to the repo..." run_cmd "cp -fv ${pkg_cp_list[@]} ${package_src_list[@]} ${repo_target}/${arch}/" if [[ ${run_cmd_return} -ne 0 ]]; then error "An error occurred copying the packages to the repo!" exit 1 fi run_cmd "repo-add -k ${gpg_sign_key} -s -v ${repo_target}/${arch}/${repo_name}.db.tar.xz ${pkg_add_list[@]}" if [[ ${run_cmd_return} -ne 0 ]]; then error "An error occurred adding the package to the repo!" exit 1 fi } msg "$(date) :: ${script_name} started..." # The abs path to the repo repo_target=${repo_basepath}/${repo_name} get_kernel_update_funcs debug_print_default_vars debug "repo_name: ${repo_name}" debug "repo_target: ${repo_target}" source_safe "src/kernels/${kernel_name}.sh" for func in "${update_funcs[@]}"; do debug "Evaluating '${func}'" "${func}" repo_package_list done # These can be commented out individually # repo_package_backup repo_add