From e64d09c9b92735c6c1eccf4777b935d0a572040b Mon Sep 17 00:00:00 2001 From: GONG Jie Date: Thu, 23 Jun 2016 18:06:19 +0800 Subject: [PATCH 1/2] [go-xcat] Get rid of yum-config-manager, it make things easier if package yum-utils is not installed --- xCAT-server/share/xcat/tools/go-xcat | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/xCAT-server/share/xcat/tools/go-xcat b/xCAT-server/share/xcat/tools/go-xcat index 205358d50..8eba3f99e 100755 --- a/xCAT-server/share/xcat/tools/go-xcat +++ b/xCAT-server/share/xcat/tools/go-xcat @@ -533,7 +533,7 @@ function download_file() # $2 repo id function add_repo_by_file_yum() { - type yum-config-manager >/dev/null 2>&1 || return 255 + [[ -d /etc/yum.repos.d ]] || return 255 local repo_file="$1" local repo_id="$2" [[ -f "${repo_file}" ]] @@ -544,13 +544,11 @@ function add_repo_by_file_yum() exit_if_bad "$?" "empty repo id" [[ "${repo_id}" =~ ^[a-zA-Z][0-9a-zA-Z-]*$ ]] exit_if_bad "$?" "${repo_id} illegal character in repo id" - local tmp_repo_file="${TMP_DIR}/${repo_id}.repo" + remove_repo_yum "${repo_id}" { echo "[${repo_id}]" grep -v '^\[' "${repo_file}" - } >"${tmp_repo_file}" - remove_repo_yum "${repo_id}" - yum-config-manager "--add-repo=${tmp_repo_file}" >/dev/null 2>&1 + } >"/etc/yum.repos.d/${repo_id}.repo" } # $1 repo file @@ -806,11 +804,13 @@ function add_repo_by_url() # $1 repo id function remove_repo_yum() { - [[ -d "/etc/yum.repos.d" ]] || return 255 + type yum >/dev/null 2>&1 || return 255 local repo_id="$1" - [[ -f "/etc/yum.repos.d/${repo_id}.repo" ]] && - rm -f "/etc/yum.repos.d/${repo_id}.repo" && - yum clean metadata >/dev/null 2>&1 + # This deleting method is not good enough. Since there could be more + # than one repostory definitions in a single repo file. + # This is a quick and dirty method. + rm -f $(grep -l "^\[${repo_id}\]$" "/etc/yum.repos.d/"*".repo") + yum clean metadata >/dev/null 2>&1 } # $1 repo id @@ -839,8 +839,7 @@ function remove_repo() # can be "2.10", "2.11", "2.12", "latest" or "devel" function add_xcat_core_repo_yum_or_zypper() { - type yum-config-manager >/dev/null 2>&1 || - type zypper >/dev/null 2>&1 || return 255 + type yum >/dev/null 2>&1 || type zypper >/dev/null 2>&1 || return 255 local url="$1" local ver="$2" local tmp="" @@ -897,8 +896,7 @@ function add_xcat_core_repo() function add_xcat_dep_repo_yum_or_zypper() { - type yum-config-manager >/dev/null 2>&1 || - type zypper >/dev/null 2>&1 || return 255 + type yum >/dev/null 2>&1 || type zypper >/dev/null 2>&1 || return 255 local url="$1" local tmp="" local install_path="${GO_XCAT_DEFAULT_INSTALL_PATH}" From de76ed3b439a88924f850b3139229e3db4acb594 Mon Sep 17 00:00:00 2001 From: GONG Jie Date: Thu, 23 Jun 2016 22:09:52 +0800 Subject: [PATCH 2/2] [go-xcat] Add fedora 24 dnf support. Now, go-xcat can work with fedora 24. --- xCAT-server/share/xcat/tools/go-xcat | 68 ++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/xCAT-server/share/xcat/tools/go-xcat b/xCAT-server/share/xcat/tools/go-xcat index 8eba3f99e..f5dce83e1 100755 --- a/xCAT-server/share/xcat/tools/go-xcat +++ b/xCAT-server/share/xcat/tools/go-xcat @@ -390,6 +390,35 @@ function check_package_version() function_dispatch "${FUNCNAME}" "$@" } +# $@ package names +function check_repo_version_dnf() +{ + type dnf >/dev/null 2>&1 || return 255 + local -a name=() + local -a ver=() + while read name ver + do + name+=("${name}") + ver+=("${ver}") + done < <(dnf repoquery -q --qf '%{name} %{version}-%{release}' "$@" 2>/dev/null) + local -i i + while [[ -n "$1" ]] + do + for i in "${!name[@]}" + do + if [[ "$1" = "${name[i]}" ]] + then + echo "${ver[i]}" + unset "name[${i}]" "ver[${i}]" + shift && continue 2 + fi + done + echo "(not found)" + shift + done + return 0 +} + # $@ package names function check_repo_version_yum() { @@ -485,6 +514,15 @@ function check_repo_version() function_dispatch "${FUNCNAME}" "$@" } +# $1 repo id +function get_package_list_dnf() +{ + type dnf >/dev/null 2>&1 || return 255 + local repo_id="$1" + [[ -z "${repo_id}" ]] && return 1 + dnf repoquery -q "--repoid=${repo_id}" --qf "%{name}" 2>/dev/null +} + # $1 repo id function get_package_list_yum() { @@ -900,15 +938,15 @@ function add_xcat_dep_repo_yum_or_zypper() local url="$1" local tmp="" local install_path="${GO_XCAT_DEFAULT_INSTALL_PATH}" - local distro="${GO_XCAT_LINUX_DISTRO}" + local distro="${GO_XCAT_LINUX_DISTRO}${GO_XCAT_LINUX_VERSION%%.*}" case "${distro}" in - "fedora") ;; - "rhel") distro="rh" ;; - "sles") ;; + "fedora2"?) distro="rh7" ;; + "rhel"*) distro="rh${distro#rhel}" ;; + "sles"*) ;; *) warn_if_bad 1 "${distro}: unsupported Linux distro" || return 1 esac [[ -z "${url}" ]] && - url="${GO_XCAT_DEFAULT_BASE_URL}/yum/xcat-dep/${distro}${GO_XCAT_LINUX_VERSION%%.*}/${GO_XCAT_ARCH}/xCAT-dep.repo" + url="${GO_XCAT_DEFAULT_BASE_URL}/yum/xcat-dep/${distro}/${GO_XCAT_ARCH}/xCAT-dep.repo" case "${url##*.}" in "repo") # local repo file add_repo_by_url_yum_or_zypper "${url}" "xcat-dep" @@ -927,7 +965,7 @@ function add_xcat_dep_repo_yum_or_zypper() url="${tmp}" ;; *) - url="${url}/${distro}${GO_XCAT_LINUX_VERSION%%.*}/${GO_XCAT_ARCH}/xCAT-dep.repo" + url="${url}/${distro}/${GO_XCAT_ARCH}/xCAT-dep.repo" add_repo_by_url_yum_or_zypper "${url}" "xcat-dep" return "$?" ;; @@ -948,7 +986,7 @@ function add_xcat_dep_repo_yum_or_zypper() then # make sure it is an absolute pathname. [[ "${url:0:1}" = "/" ]] || url="${PWD}/${url}" - url="${url}/${distro}${GO_XCAT_LINUX_VERSION%%.*}/${GO_XCAT_ARCH}" + url="${url}/${distro}/${GO_XCAT_ARCH}" add_repo_by_url_yum_or_zypper "${url}" "xcat-dep" return "$?" fi @@ -969,6 +1007,12 @@ function add_xcat_dep_repo() function_dispatch "${FUNCNAME}" "$@" } +function update_repo_dnf() +{ + type dnf >/dev/null 2>&1 || return 255 + dnf --nogpgcheck updateinfo /dev/null 2>&1 +} + function update_repo_yum() { type yum >/dev/null 2>&1 || return 255 @@ -992,6 +1036,14 @@ function update_repo() function_dispatch "${FUNCNAME}" "$@" } +function install_packages_dnf() +{ + type dnf >/dev/null 2>&1 || return 255 + local -a args=() + [[ "$1" = "-y" ]] && args=("-y") && shift + dnf --nogpgcheck "${args[@]}" install "$@" +} + function install_packages_yum() { type yum >/dev/null 2>&1 || return 255 @@ -1316,7 +1368,7 @@ Version: ${GO_XCAT_LINUX_VERSION} EOF case "${GO_XCAT_LINUX_DISTRO}" in -"rhel"|"sles"|"ubuntu") +"fedora"|"rhel"|"sles"|"ubuntu") ;; *) warn_if_bad 1 "${GO_XCAT_LINUX_DISTRO}: unsupported Linux distro"