generalize code for repositories, add package dir cache
This commit is contained in:
parent
804dbc6714
commit
654e88884c
81
install.sh
81
install.sh
|
@ -47,8 +47,11 @@ export LC_ALL=C
|
||||||
export LANG=C
|
export LANG=C
|
||||||
unset LANGUAGE
|
unset LANGUAGE
|
||||||
|
|
||||||
|
declare -a repositories
|
||||||
|
repositories=(core extra)
|
||||||
declare -A dependencies
|
declare -A dependencies
|
||||||
dependencies[pacman]=x
|
dependencies[pacman]=x
|
||||||
|
declare -A pkgdircache
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
echo "[$(date)]" "$@" >&2
|
echo "[$(date)]" "$@" >&2
|
||||||
|
@ -140,45 +143,60 @@ install_haveged() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize_coredb() {
|
|
||||||
log "Downloading package database ..."
|
|
||||||
wget "${archlinux_mirror}/core/os/${target_architecture}/core.db"
|
|
||||||
log "Unpacking package database ..."
|
|
||||||
mkdir core
|
|
||||||
tar -zxf core.db -C core
|
|
||||||
}
|
|
||||||
|
|
||||||
initialize_extradb() {
|
|
||||||
log "Downloading package database ..."
|
|
||||||
wget "${archlinux_mirror}/extra/os/${target_architecture}/extra.db"
|
|
||||||
log "Unpacking package database ..."
|
|
||||||
mkdir extra
|
|
||||||
tar -zxf extra.db -C extra
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_version() {
|
remove_version() {
|
||||||
echo "${1}" | grep -o '^[A-Za-z0-9_-]*'
|
echo "${1}" | grep -o '^[A-Za-z0-9_-]*'
|
||||||
}
|
}
|
||||||
|
|
||||||
get_package_directory() {
|
initialize_databases() {
|
||||||
local dir pkg
|
local repo dir pkg
|
||||||
for dir in core/${1}-* extra/${1}-*; do
|
for repo in "${repositories[@]}"; do
|
||||||
if [ "$(get_package_value ${dir}/desc NAME)" = "${1}" ]; then
|
log "Downloading package database '${repo}' ..."
|
||||||
echo "${dir}"
|
wget "${archlinux_mirror}/${repo}/os/${target_architecture}/${repo}.db"
|
||||||
return
|
log "Unpacking package database '${repo}' ..."
|
||||||
fi
|
mkdir ${repo}
|
||||||
|
tar -zxf ${repo}.db -C ${repo}
|
||||||
done
|
done
|
||||||
for dir in core/* extra/*; do
|
}
|
||||||
while read pkg; do
|
|
||||||
pkg=$(remove_version "${pkg}")
|
get_package_directory() {
|
||||||
if [ "${pkg}" = "${1}" ]; then
|
|
||||||
|
local req="${1}"
|
||||||
|
local repo dir pkg
|
||||||
|
|
||||||
|
dir="${pkgdircache[${req}]:-}"
|
||||||
|
if [ -n "${dir}" ]; then
|
||||||
|
echo "${dir}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
for repo in "${repositories[@]}"; do
|
||||||
|
for dir in ${repo}/${req}-*; do
|
||||||
|
pkg="$(get_package_value ${dir}/desc NAME)"
|
||||||
|
pkgdircache[${pkg}]="${dir}"
|
||||||
|
if [ "${pkg}" = "${req}" ]; then
|
||||||
echo "${dir}"
|
echo "${dir}"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
done < <(get_package_array ${dir}/depends PROVIDES)
|
done
|
||||||
done
|
done
|
||||||
log "Package '${1}' not found."
|
|
||||||
return 1
|
for repo in "${repositories[@]}"; do
|
||||||
|
for dir in ${repo}/*; do
|
||||||
|
while read pkg; do
|
||||||
|
pkg=$(remove_version "${pkg}")
|
||||||
|
[ -z "${pkgdircache[${pkg}]:-}" ] &&
|
||||||
|
pkgdircache[${pkg}]="${dir}"
|
||||||
|
if [ "${pkg}" = "${req}" ]; then
|
||||||
|
echo "${dir}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done < <(get_package_array ${dir}/depends PROVIDES)
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
log "Package '${req}' not found."
|
||||||
|
false
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_package_value() {
|
get_package_value() {
|
||||||
|
@ -459,8 +477,7 @@ installer_main() {
|
||||||
clean_archroot
|
clean_archroot
|
||||||
install_haveged
|
install_haveged
|
||||||
|
|
||||||
initialize_coredb
|
initialize_databases
|
||||||
initialize_extradb
|
|
||||||
calculate_dependencies
|
calculate_dependencies
|
||||||
download_packages
|
download_packages
|
||||||
extract_packages
|
extract_packages
|
||||||
|
|
Loading…
Reference in New Issue